【问题标题】:Can a Java application detect that a debugger is attached?Java 应用程序能否检测到附加了调试器?
【发布时间】:2011-07-20 14:06:03
【问题描述】:

我知道 (jvm) 启动选项让 jvm 等到连接调试器 - 这不是我的意思。

是否可以从 Java 代码中也检测调试器的附件,以便我可以例如写一个“脚本”来做一些事情,然后在某个时刻让我的应用程序等待调试器?

【问题讨论】:

标签: java debugging


【解决方案1】:

没有。这些选项是 JVM 选项,在调试器连接之前不执行任何 Javacode。但是,您可以让应用程序启动,并在 getter 上为变量自旋循环,您可以从调试器中设置该变量以让您的应用程序继续运行。

【讨论】:

  • 我知道那些是 jvm 选项(这就是我的第一句话的意思)。变量的有趣想法;接近我想要的。
  • 那么,Java 没有Debugger.IsAttached 吗? -- 超级蹩脚。
  • 嗯,经过一番搜索,Android 似乎有一个 Debug.isDebuggerConnected() -- 太糟糕了,普通 Java 没有。
  • 如果只想知道当前JVM会话是否开启了调试,可以使用ManagementFactory.getRuntimeMXBean().getInputArguments().contains("-Xdebug")
  • 请注意调试器参数可以通过环境变量JAVA_TOOL_OPTIONS 传递,它不会出现在命令行中
【解决方案2】:

根据您想做什么,可能值得调查onthrow JDWP sub-option。我实际上并没有尝试过这个;-) 但似乎你可以创建一个特殊的异常类型,你可以抛出并捕获来触发 JVM 挂起。如链接示例所示,结合launch 可以提供一些有趣的替代方案。当然,逻辑/工作流程与你所表达的不同,但这是值得考虑的事情......

【讨论】:

    【解决方案3】:

    请参阅Determine if a java application is in debug mode in Eclipse 以检测调试器

    您可以使用 TimerTask 来轮询附件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 2014-09-26
      • 2018-03-12
      相关资源
      最近更新 更多