如何获取正在运行的应用程序的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

回到顶部