获取java程序运行时的当前堆栈跟踪';她在跑步

获取java程序运行时的当前堆栈跟踪';她在跑步,java,debugging,jar,execution,Java,Debugging,Jar,Execution,假设我使用java命令运行一个java程序,若我有该程序的源代码,在该程序运行时,是否可以获取该程序的当前位置或堆栈跟踪?首选不停止我的程序的解决方案。将A连接到JVM并暂停JVM。然后,调试器可以向您显示stacktrace 将附加到JVM并暂停JVM。然后,调试器可以向您显示stacktrace jps查找进程id。jstack转储堆栈 如果它正在为命令行运行,ctrl-Z/ctrl-break(取决于平台)也将执行此任务。jps查找进程id。jstack转储堆栈 如果它是为命令行运行的,c

假设我使用
java
命令运行一个java程序,若我有该程序的源代码,在该程序运行时,是否可以获取该程序的当前位置或堆栈跟踪?首选不停止我的程序的解决方案。

将A连接到JVM并暂停JVM。然后,调试器可以向您显示stacktrace

将附加到JVM并暂停JVM。然后,调试器可以向您显示stacktrace

jps
查找进程id。
jstack
转储堆栈


如果它正在为命令行运行,
ctrl-Z
/
ctrl-break
(取决于平台)也将执行此任务。
jps
查找进程id。
jstack
转储堆栈


如果它是为命令行运行的,
ctrl-Z
/
ctrl-break
(取决于平台)也将执行此任务。

Neat!工作起来很有魅力!非常感谢。顺便说一句,看起来ctrl-Z不适用于我的平台(Red Hat linux 4.1.2-51),它似乎只是把我的程序放在后台,我发现在ctrl-Z下,我甚至不能使用jstack来监视它。呃,
ctrl-3
我认为是另一种选择,但可能也是这样吗?通常,
ctrl-z
将暂停(使用
bg
恢复)。信号处理可能会有所不同。谢谢。我认为恢复是
fg
,不是吗?
fg
前台恢复,
bg
后台恢复。另一种选择是发出SIGQUIT(
kill-3[pid]
),它将把所有线程(及其堆栈跟踪)转储到STDOUT.Neat!工作起来很有魅力!非常感谢。顺便说一句,看起来ctrl-Z不适用于我的平台(Red Hat linux 4.1.2-51),它似乎只是把我的程序放在后台,我发现在ctrl-Z下,我甚至不能使用jstack来监视它。呃,
ctrl-3
我认为是另一种选择,但可能也是这样吗?通常,
ctrl-z
将暂停(使用
bg
恢复)。信号处理可能会有所不同。谢谢。我认为恢复是
fg
,不是吗?
fg
前台恢复,
bg
后台恢复。另一种选择是发出SIGQUIT(
kill-3[pid]
),它将把所有线程(及其堆栈跟踪)转储到STDOUT。谢谢,但我更喜欢不停止程序的解决方案。谢谢,但我更喜欢不停止程序的解决方案。