我正在调试多进程Java应用程序。在启动子进程之后,我会先设置一个断点来启动它。然后,子进程进入循环,等待在调试器中手动中断,以便我有时间附加到该进程。
我想让父进程中的断点触发NetBeans调试器运行并附加到子进程(该进程以调试侦听器端口启动)。
这将使调试孩子更加容易。
我当前看到的唯一动作是启用和禁用其他断点组。...
答案 0 :(得分:0)
我最终编写了一个Netbeans模块,该模块与应用程序中的支持代码进行交互以捕获子进程的创建,然后在他们正在使用的调试端口上自动将其附加到它们。
它通过自动创建的隐藏断点(在生成子对象时我的应用程序调用的方法)执行此操作。该断点在我的应用程序的支持类中评估一个静态方法以获取调试端口。然后,它尝试连接到该端口,并从断点恢复应用程序。
最终结果是,我无需用户干预即可自动附加到子进程。只需在主应用程序上开始调试,然后在子进程中无缝击中断点即可。就像gdb选项(设置Follow-fork-mode child)一样,在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调试器,以找到该值。我在任何地方都找不到文档。