【问题标题】:IntelliJ IDEA debugger follow child processIntelliJ IDEA 调试器跟随子进程
【发布时间】:2012-09-13 04:01:28
【问题描述】:

我们有一些 Java 代码使用以下代码启动一个新进程:Runtime.getRuntime().exec(command); 我希望能够告诉调试器它应该遵循子进程,就像你对 GDB as documented here 所做的那样,发出set follow-fork-mode child 命令。

IntelliJ IDEA Java 调试器中是否有类似的东西?如果是,我该如何配置?

谢谢

【问题讨论】:

  • 在推特上联系@wajiii,他可能知道。
  • 子进程是JVM吗?请注意,您必须调整此过程的 VM 选项,以便它以调试模式启动。不,IDEA 不支持自动方式,但您可以使用第二个远程调试配置来连接和调试使用适当调试选项启动的子进程。
  • @CrazyCoder:是的,子进程是 JVM。谢谢回复。我一直在寻找一种无需使用远程调试的自动方式,但看起来我没有太多选择。

标签: java debugging intellij-idea


【解决方案1】:

Java 不提供调试进程及其子进程的自动化方法。需要使用 JVM 选项运行子进程以启用调试。 IDEA Remote Debug 配置会建议使用正确的选项。使用适当的选项启动该过程后,您可以使用 Remote Debug 配置从 IDEA 连接到它。

示例选项:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

您可能希望从suspend=y 开始,以便在您连接调试器之前暂停执行。

【讨论】:

  • 是的,您可以通过两种方式连接:等待应用程序和应用程序等待调试器。这样你就可以实现所有可能的场景。你可以关注这个话题:stackoverflow.com/questions/21114066/…
【解决方案2】:

我们现在有了这个 Intellij 插件,它使用 java 代理以调试模式自动启动所有子进程。

它侦听 7857 上的任何被调试进程,然后将调试器附加到这些进程。

  1. 安装AttachMe
  2. 要启用自动模式,请先运行 source ~/.attachme/conf.sh
  3. 然后启动 AttachMe 监听器
  4. 在 prod 模式下使用 Play 应用程序对其进行测试(假设启用了播放插件),请执行 sbt start。以 prod 模式运行会分叉另一个 JVM 进程。调试点现在应该命中了。

【讨论】:

    猜你喜欢
    • 2016-11-18
    • 2012-07-23
    • 2021-12-14
    • 1970-01-01
    • 2012-05-05
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多