代码之家  ›  专栏  ›  技术社区  ›  Paul Croarkin

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

  •  27
  • Paul Croarkin  · 技术社区  · 17 年前

    我正在Eclipse内部通过BEA WebLogic Server V9.2运行时环境启动WebLogic应用程序。如果这是直接从命令行运行的,我将执行ctrl-break以强制执行线程转储。在Eclipse中有什么方法可以做到这一点吗?

    9 回复  |  直到 12 年前
        1
  •  25
  •   PhiLho    17 年前

    事实上(感谢VONC指出了这条线),达斯汀在对他的信息的评论中指出 jstack .

    我在Eclipse运行了一个Java应用程序(GUI),我可以在Windows的进程管理器和它的PID中看到相关的java.EXE,7088(当然在UNIX中更简单)。

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

    如果我们可以直接从Eclipse中完成这项工作会更好,但这已经很有用了。

        2
  •  7
  •   lesliel    17 年前
        3
  •  6
  •   Denis R.    17 年前

    当您处于调试模式时,您可以这样做:转到“调试”透视图中的“调试”视图,单击已启动的进程并单击“暂停”,您将获得所有进程的图形堆栈。

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

        4
  •  3
  •   Martin Oberhuber    16 年前

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

        5
  •  2
  •   Simon Lieschke    17 年前

    StackTrace 是您可以尝试的另一个选项。从功能:

    Java进程运行的线程转储 作为一个 窗户 服务(如Tomcat 示例),以开头 JavaW.EXE , 在任何浏览器中运行的小程序或 嵌入在另一个进程中的JVM。 stacktrace在Windows、Linux和 Mac OS X。

        6
  •  2
  •   Peter Butkovic    12 年前

    如果您喜欢基于用户界面的解决方案 visualvm 可能是个不错的选择。(它的优势还在于它与JDK一起分发)

    要在VisualVM中进行线程转储,请执行以下操作:

    1. 连接到进程(远程或本地)和
    2. Threads (TAB)-GT; Thread Dump (按钮)
        7
  •  0
  •   Community Mohan Dere    9 年前

    是否尝试用java.exe而不是javaw.exe(在 eclipse.ini )?

    这可能为您提供所需的控制台,如中所述。 this bug 而在 this message .

    其他的想法(在Java选项方面)可以从中得到。 other SO question .

        8
  •  0
  •   Wiraj    16 年前

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

        9
  •  0
  •   Tim Cooper    14 年前

    在Linux上至少可以 ps -ef | grep java 获取pid,然后执行 kill -3 PID 它将输出到Eclipse控制台。

    推荐文章