我使用IntelliJ IDEA远程调试Java CLI程序,调试器监听连接。
这适用于第一次调用,但调试器在CLI程序断开连接后停止侦听。我希望调试器继续监听,因为将进行多次CLI调用(按顺序,而不是并行),并且只有其中一个会触发我设置的断点。
这是我的客户端调试配置:
-agentlib:jdwp=transport=dt_socket,server=n,address=5005,suspend=y
是否可以让调试器保持监听?
答案 0 :(得分:2)
因为CLI程序终止,调试器也会停止。如果您仍想继续多次运行CLI程序的调试器会话,那么您可以尝试如下,
编写一个包装程序,从中多次调用CLI程序并调试包装程序而不是CLI程序。
像这样,
public class Wrapper {
public static void main(String[] args) {
YourCLIProgram yp = new YourCLIProgram();
// First Invocation
String[] arg1 = { }; // Arguments required for your CLI program
yp.main(arg1);
// Second Invocation
String[] arg2 = { }; // Arguments required for your CLI program
yp.main(arg2);
// Third Invocation
String[] arg3 = { }; // Arguments required for your CLI program
yp.main(arg3);
// Fourth Invocation
String[] arg4 = { }; // Arguments required for your CLI program
yp.main(arg4);
}
}
我希望它有效。
答案 1 :(得分:1)
这也取决于你想要实现的目标。 如果要检查传递给CLI的参数,只需将它们记录到文件中,或者在DB(或文件)中保存所需的任何信息。
答案 2 :(得分:0)
在JPDA中,按规范transport service可以支持或不支持多个连接。 例如,在Eclipse中doesn't。我想IDEA一样。
答案 3 :(得分:0)
设置运行配置时,您是否选择了" Listen"调试器模式?您显示的命令行参数看起来像普通"附加"设置,而#34; Listen"看起来像这样:
-agentlib:jdwp=transport=dt_socket,server=n,address=yourhost.yourdomain:5005, suspend=y,onthrow=<FQ exception class name>,onuncaught=<y/n>
(具体来说,您的参数缺少应用程序的地址 - 您的CLI程序 - 在启动时连接到IDEA。)
我读了一篇帖子,暗示了&#34; onthrow&#34;一般调试可能不需要参数,但我自己没有尝试过。
答案 4 :(得分:0)
尝试使用suspend = n:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
在我的本地应用程序(tomcat网络应用程序)上,即使我在JDK8上运行,我仍然使用较旧的方式来做它并且它工作正常(你可以尝试另一件事):
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005