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