如何在Java中打印出本机堆栈跟踪?

时间:2015-06-03 07:47:21

标签: java native

我想打印Java应用程序的stacktrace本机方法调用。 Thread.dumpStack()仅打印java方法调用。

3 个答案:

答案 0 :(得分:3)

如果你想要非java堆栈,你需要一个“本机”调试器,例如gdb

您也可以使用gdb附加到正在运行的java。

有关使用gdb进行无缝调试Java的文档,另请参阅:http://gcc.gnu.org/java/gdb.html

(gcc可以将java代码编译为本机代码;此时本机调试器也将显示Java回溯。)

答案 1 :(得分:2)

如果可以在您的应用程序之外执行此操作,则可以运行$JAVA_HOME/bin/jstack -m <jvm_pid>

答案 2 :(得分:2)

要查看内部JVM(C级)函数调用,请将标准C调试器附加到该进程。

究竟如何做到这一点取决于您选择的操作系统和调试器,例如OSX上会使用xcode。有关使用gdb的说明,请参阅here