在netbeans java中触发对断点命中的自定义操作?

问题描述 投票:0回答:1

我正在调试一个多进程java应用程序。我在启动子进程后启动第一个进程并设置断点。子进程然后进入循环,等待在调试器中手动中断,以便我有时间附加到它。

我想让父进程中的断点触发NetBeans调试器去附加到子进程(使用调试侦听器端口启动)。

这样可以更轻松地调试孩子。

我看到的唯一当前操作是启用和禁用其他断点组....

java debugging netbeans
1个回答
0
投票

我最终编写了一个Netbeans模块,该模块与我的应用程序中的支持代码交互,以捕获子进程创建,然后在他们正在使用的调试端口上自动附加到它们。

它通过自动创建的隐藏断点(在我的应用程序在生成子项时调用的方法)执行此操作。该断点评估应用程序中支持类中的静态方法以获取调试端口。然后它尝试连接到该端口并从断点恢复应用程序。

最终结果是我在没有用户干预的情况下自动附加到子进程。只需在主应用程序上启动 - 调试,然后在子进程中无缝地触发断点。像gdb选项(设置follow-fork-mode子)一样,在fork / exec之后附加和跟踪子进程。

它只适用于我的特定情况,因为我控制Netbeans插件模块和正在开发的应用程序。

我不能在这里发布整个来源,但我用来实现这一目标的内容包括:

DebuggerManager.getDebuggerManager().addDebuggerListener();
MethodBreakpoint.create();
RequestProcessor.getDefault().post();
DebuggerInfo.create ("netbeans-jpda-AttachingDICookie", new Object [] {AttachingDICookie.create ("localhost",port)} );
DebuggerManager.getDebuggerManager().startDebugging()
JPDADebugger d = DebuggerEngine.lookupFirst("", JPDADebugger.class);
JPDADebugger.waitRunning();

神奇的字符串“netbeans-jpda-AttachingDICookie”是最难以理解的。通过正常的附加进程调用调试netbeans调试器来查找此值。我无法在任何地方找到它。

© www.soinside.com 2019 - 2024. All rights reserved.