可能重复:
如何确定是否启用了"调试模式"
来自C#,我无法相信Java只有在调试程序时才能执行代码.不知何故,Log4J似乎能够做到这一点.有谁知道这种可能性?我在考虑这样的事情:
#if DEBUG
executedCode();
#endif
Run Code Online (Sandbox Code Playgroud)
或类似的东西:
if (Java.isDebugging())
executeCode();
Run Code Online (Sandbox Code Playgroud)
想法?
编辑:感谢Matt Ball,这个可能的重复代码中的代码:
public static boolean debugging = java.lang.management.ManagementFactory.getRuntimeMXBean().
getInputArguments().toString().indexOf("-agentlib:jdwp") > 0;
Run Code Online (Sandbox Code Playgroud)
我认为您正在将程序的调试版本与在调试器下运行混为一谈(除非 C# 相当奇怪)。
许多系统 - 包括许多 C/C++ 构建环境,我希望 C#,考虑到 Microsoft 历史上设计 Visual Studio 构建过程的方式 - 可以执行两种不同类型的构建:
您可以在开发和调试程序时使用调试版本,并使用发布版本进行最终 QA 和发布。然而,调试版本独立于在调试器下运行 - 它们是普通程序,如果您运行它们,则运行并仍然输出它们的额外日志记录信息。这非常有用。
在调试器下运行它们是完全正交的。您可以在调试器下运行发布版本(尽管缺少调试符号,它可能不是很有用)。事实上,我认为您不希望根据是否在调试器下运行来更改代码 - 这使得调试应用程序中实际运行的代码变得相当困难。
与 C、C++ 和 C# 不同,Java 没有编译时条件工具,因此一切都在程序中启用。通常,您可以通过一种非常快速的方法来检查是否要发出调试消息,并在不发出调试消息的情况下执行尽可能少的工作来处理此问题。