29

我正在通过 BEA Weblogic Server v9.2 运行时环境在 Eclipse 中启动一个 Weblogic 应用程序。如果这直接从命令行运行,我会执行 ctrl-BREAK 来强制执行线程转储。有没有办法在 Eclipse 中做到这一点?

4

9 回答 9

25

确实(感谢 VonC 指向 SO 线程),Dustin 在对他的消息的评论中指向jstack

我在 Eclipse 中运行了一个小的 Java 应用程序(带有 GUI),我可以在 Windows 的进程管理器中看到相关的 javaw.exe 及其 PID 7088(当然,在 Unix 中它更简单)。

如果我在命令提示符下键入jstack 7088,则每个线程都有所需的堆栈转储。
凉爽的。

如果我们可以直接从 Eclipse 中执行此操作会更好,但这已经很有用了。

于 2008-10-28T15:18:07.350 回答
7

您可以在调试模式下执行此操作:进入调试视图中的调试视图,单击已启动的进程并单击暂停,您将获得所有进程的图形堆栈。

注意:这在使用远程调试时也有效,您不需要从 eclipse 启动 weblogic,您可以自己启动它,打开调试端口并为其创建“远程 java 应用程序调试配置”。

于 2008-10-28T15:48:08.163 回答
7

检查发送信号: http ://www.latenighthacking.com/projects/2003/sendSignal/

于 2009-02-07T23:28:11.357 回答
3

Eclipse Wiki: How to Report a Deadlock列出了在 Eclipse 中创建线程转储的所有可能选项。根据具体情况,其中一个可能会更好——我个人在 Windows 上最喜欢的是 Adaptj Stacktrace 工具。

于 2009-10-13T13:51:20.580 回答
2

StackTrace是您可以尝试的另一种选择。从特点:

作为Windows服务(例如 Tomcat)运行的 Java 进程的线程转储,以javaw.exe开始,在任何浏览器中运行的小程序或嵌入在另一个进程中的 JVM。StackTrace 适用于 Windows、Linux 和 Mac OS X。

于 2009-04-28T23:36:56.830 回答
2

如果您更喜欢基于 UI 的解决方案,visualvm可能是一个不错的选择。(它的优点还在于它与JDK一起分发)

在 visualvm 中进行线程转储:

  1. 连接到进程(远程或本地)和
  2. Threads(标签)-> Thread Dump(按钮)
于 2014-07-30T08:22:59.310 回答
0

您是否尝试使用 java.exe 而不是 javaw.exe (在您的eclipse.ini中)启动您的 Eclipse?

这可能会为您提供所需的控制台,如此错误此消息中所述。

其他想法(在 java 选项方面)可以从这个其他 SO question中得出。

于 2008-10-28T14:59:55.703 回答
0

您可以通过 JVisualVM 连接并获取线程转储。只需右键单击应用程序树中的应用程序节点,然后选择“线程转储”

于 2010-02-19T16:54:53.237 回答
0

在 linux 上,至少您可以执行 aps -ef | grep java来获取 PID,然后执行 akill -3 PID并将其输出到 Eclipse 控制台。

于 2012-03-16T22:27:43.973 回答