【发布时间】:2011-04-16 03:04:08
【问题描述】:
Java 程序如何确定它是否在调试模式下运行?
应用程序在常规“全速”模式下的行为应该与“调试模式”(连接调试器时,在调试模式下运行时)略有不同。应用程序通过 TCP 与另一台计算机、另一个进程或在其内部进行通信。我的同事希望我们默认使用 Socket.setSoTimeout(1000),以便从套接字读取最多可以阻塞 1 秒。在调试时,这当然是不够的,应用程序会停止正常工作。因此,解决方案是将SO_TIMEOUT 设置得更高,但只是处于调试模式(例如:无限制)。现在,我并不总是设置断点,也不想使用我可以自己设置“调试”属性的调试版本。有时我会附加调试器(远程调试)。我主要使用 Eclipse,所以一个可以在那里工作的解决方案就可以了。
可能的答案包括:
要查看是否在调试模式下运行,请在
java.lang.management.*或javax.management.*中使用以下方法...您的同事因 X 原因出错,您不应将
SO_TIMEOUT默认设置为 1 秒。
更新
我知道系统属性方法,但我将问题留待解决以解决我最初的问题。
【问题讨论】:
-
@will 您对“调试模式”的定义与我的定义不符,而且您有一个非常不同的用例。在您的情况下,我假设使用配置设置(系统属性或其他)就可以了。对于我的用例,它不是。
-
既然你显然不是编程的初学者,我只是想知道你为什么试图避免使用系统属性方法,因为你肯定知道这将是最面向未来和最灵活的解决方案?跨度>
-
@thehandofNOD 系统属性方法适用于某些用例,但不太方便。我一直在寻找一种自动化的方法。从对答案的投票中可以看出,许多其他人也对采用自动化方式感兴趣。