Java程序如何找出它是否在调试模式下运行?
在常规的“全速”模式下,应用程序的行为应与“调试模式”下(在连接调试器时,在调试模式下运行)的行为有所不同。该应用程序通过TCP与另一台计算机,另一进程或自身内部进行通信。我的同事希望我们Socket.setSoTimeout(1000)默认使用,以便从套接字读取最多可以阻塞1秒钟。调试时,这当然是不够的,并且应用程序将停止正常运行。因此,一种解决方案是设置SO_TIMEOUT较高的值,但仅在调试模式下使用(例如:无限制)。现在,我并不总是设置断点,也不希望使用可以自行设置“ debug”属性的调试版本。有时我会连接调试器(远程调试)。我主要使用Eclipse,因此可以在其中正常使用的解决方案。
Socket.setSoTimeout(1000)
SO_TIMEOUT
可能的答案包括:
要了解是否以调试模式运行,请在java.lang.management.*或javax.management.*…中使用以下方法。
java.lang.management.*
javax.management.*
您的同事由于X原因而错了SO_TIMEOUT,默认情况下您不应将其设置为1秒。
我了解系统属性方法,但是我有待解决最初的问题。
我现在自己发现了:
boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean(). getInputArguments().toString().indexOf("jdwp") >= 0;
这将检查是否使用了Java调试线协议代理。