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



我正在调试一个多进程java应用程序。在第一个进程启动子进程之后,我用断点集启动它。然后,子进程进入一个循环,等待在调试器中手动中断,这样我就有时间连接到它

我想让父进程中的断点触发NetBeans调试器去连接到子进程(它是用调试侦听器端口启动的(。

这将使调试孩子变得更加容易。

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

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

它通过一个自动创建的隐藏断点(在派生子级时应用程序调用的方法上(来实现这一点。该断点评估我的应用程序中支持类中的一个静态方法,以获得调试端口。然后它尝试连接到该端口,并从断点恢复应用程序。

最终的效果是,我可以在没有用户干预的情况下自动附加到子进程。只需在主应用程序上启动调试,然后在子进程中无缝命中断点。类似于gdb选项(设置follow-fork-modechild(,在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调试器才找到这个值。我在任何地方都找不到它的文档。

最新更新