如何获取正在运行的应用程序的Java调用堆栈
我正在研究非常庞大的基于Java
Web的应用程序。由于在开发过程中没有完成正确的日志记录,因此我很难设置断点并调试应用程序,因为我不知道执行顺序。在执行一些操作之后,是否有任何机制可以获取正在运行的Java应用程序的完整调用堆栈。
我在网上搜索了很长时间,但无法找到具体的解决方案。如果有东西请给我建议。谢谢
回答:
方法1:从命令行使用Jstack实用程序(JDK发行版的一部分)。
方法2:将信号3发送到Java进程,它将在stdout上转储堆栈跟踪。
方法3:从应用程序内部调用Thread.getAllStackTraces():
public class StackTraceDumper{
public static dumpAllStackTraces ()
{
for (Map.Entry <Thread, StackTraceElement []> entry:
Thread.getAllStackTraces().entrySet ())
{
System.out.println (entry.getKey ().getName () + ":");
for (StackTraceElement element: entry.getValue ())
System.out.println ("\t" + element);
}
}
}
然后StackTraceDumper.dumpAllStackTraces()
在需要转储堆栈跟踪的位置使用。
以上是 如何获取正在运行的应用程序的Java调用堆栈 的全部内容, 来源链接: utcz.com/qa/414601.html