我正在尋找一種方法來打破Java代碼中的調試器,而無需在IDE中設置斷點。DebugBreak等效於Java?
在Win32中有DebugBreak()
,在C#中有DebugBreak() Equivalent in C#,但我在Java中找不到任何東西。
我想要做的事情:說我有一個30秒的超時等待,但在正常情況下,等待應該始終是< 1秒。我想用ByteMan或類似的東西先等待1秒超時,如果等待超時,則進入調試器。
我正在尋找一種方法來打破Java代碼中的調試器,而無需在IDE中設置斷點。DebugBreak等效於Java?
在Win32中有DebugBreak()
,在C#中有DebugBreak() Equivalent in C#,但我在Java中找不到任何東西。
我想要做的事情:說我有一個30秒的超時等待,但在正常情況下,等待應該始終是< 1秒。我想用ByteMan或類似的東西先等待1秒超時,如果等待超時,則進入調試器。
這個問題的海報做正是我一直在尋找:Secure Debugging for Production JVMs
它再現了DebugBreak
最大的特點,那就是你只能後的「斷點」被打附加IDE到您的程序。
不是您的問題的直接答案,但在大多數IDE中,您可以設置conditional breakpoints
。
這將要求您在超時前在代碼中設置時間戳變量,並在超時後在斷點中測試其值。如果增量大於閾值,則會觸發斷點。
我創造了這個類
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();
,就是這樣。它調用本地函數 void WINAPI DebugBreak(void);
內Kernel32.dll
您還需要jna-4.4.0.jar
我試圖讓這個「可重複使用」,這樣我就不必修改代碼,所有的時間jar文件。如果時間戳變量是通過字節碼操作注入的,我懷疑IDEA會讓我在斷點狀態下使用它。不錯的建議,但我會嘗試。 –