【发布时间】:2011-07-20 14:06:03
【问题描述】:
我知道 (jvm) 启动选项让 jvm 等到连接调试器 - 这不是我的意思。
是否可以从 Java 代码中也检测调试器的附件,以便我可以例如写一个“脚本”来做一些事情,然后在某个时刻让我的应用程序等待调试器?
【问题讨论】:
我知道 (jvm) 启动选项让 jvm 等到连接调试器 - 这不是我的意思。
是否可以从 Java 代码中也检测调试器的附件,以便我可以例如写一个“脚本”来做一些事情,然后在某个时刻让我的应用程序等待调试器?
【问题讨论】:
没有。这些选项是 JVM 选项,在调试器连接之前不执行任何 Javacode。但是,您可以让应用程序启动,并在 getter 上为变量自旋循环,您可以从调试器中设置该变量以让您的应用程序继续运行。
【讨论】:
Debugger.IsAttached 吗? -- 超级蹩脚。
Debug.isDebuggerConnected() -- 太糟糕了,普通 Java 没有。
ManagementFactory.getRuntimeMXBean().getInputArguments().contains("-Xdebug")
JAVA_TOOL_OPTIONS 传递,它不会出现在命令行中
根据您想做什么,可能值得调查onthrow JDWP sub-option。我实际上并没有尝试过这个;-) 但似乎你可以创建一个特殊的异常类型,你可以抛出并捕获来触发 JVM 挂起。如链接示例所示,结合launch 可以提供一些有趣的替代方案。当然,逻辑/工作流程与你所表达的不同,但这是值得考虑的事情......
【讨论】:
请参阅Determine if a java application is in debug mode in Eclipse 以检测调试器
您可以使用 TimerTask 来轮询附件
【讨论】: