DebugBreak在Java中等效?
我正在寻找一种从Java代码进入调试器的方法,而无需在IDE中设置断点。
在Win32中有DebugBreak()
,在C#中, DebugBreak()在C#中是等价的 ,但我在Java中找不到任何东西。
我正在尝试做什么:说我等待30秒超时,但在正常条件下等待应该始终<1s。 我想使用ByteMan或类似的东西先等待1s超时,如果等待超时,则进入调试器。
不是您问题的直接答案,但在大多数IDE中,您可以设置conditional breakpoints
。
这将要求您在超时之前在代码中设置timestamp变量,并在超时后在断点中测试其值。 如果增量大于阈值,您将触发断点条件。
这个问题的海报完全符合我的要求: 生产JVM的安全调试
它重现了DebugBreak
的最佳function,即只有在命中“断点”后才能将IDE附加到程序中。
我创建了这个类
import com.sun.jna.Library; public interface Kernel32 extends Library { public void OutputDebugStringA(String Text); public void DebugBreak(); }
然后像这样使用它:
Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class); lib.OutputDebugStringA("just before DebugBreak\n"); lib.DebugBreak();
就是这样。 它调用native函数void WINAPI DebugBreak(void);
在Kernel32.dll
您还需要jar文件jna-4.4.0.jar