This article discusses various performance tracing and profiling tools for Java applications when major code modifications are not possible. BTrace is a tool that compiles and dynamically inserts Java code into running applications, allowing developers to hook into execution paths of their apps. async-profiler is an open-source profiler designed for low overhead and suitable for running in production systems. It uses performance events and HotSpot-specific APIs to measure CPU cycles, cache hits/misses, and Java heap memory allocations. jstack prints Java stack traces for a running Java app and can be run against core files and remote servers. These tools provide valuable insights into the behavior of Java applications when debugging is not an option.