如何在Eclipse中强制进行线程转储?

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

确实(感谢VonC指向SO线程),Dustin在评论他的消息时指出了jstack 。

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

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

如果我们可以直接从Eclipse那样做会更好,但这已经很有用了。

查看SendSignal: http : //www.latenighthacking.com/projects/2003/sendSignal/

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

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

Eclipse Wiki: 如何报告死锁列出了在Eclipse中创建线程转储的所有可能选项。 根据具体情况,一个或另一个可能更好 – 我个人最喜欢的Windows是Adaptj Stacktrace工具。

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

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

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

在visualvm中获取线程转储:

  1. 连接到进程(远程或本地)和
  2. 转到Threads (选项卡) – > Thread Dump (按钮)

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

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

其他想法(根据java选项)可以从其他SO问题中得出。

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

在Linux上至少你可以做一个ps -ef | grep java ps -ef | grep java获取PID然后执行kill -3 PID并将其输出到Eclipse控制台。