2011-08-01 100 views
10

我正在尋找一種方法來打破Java代碼中的調試器,而無需在IDE中設置斷點。DebugBreak等效於Java?

在Win32中有DebugBreak(),在C#中有DebugBreak() Equivalent in C#,但我在Java中找不到任何東西。

我想要做的事情:說我有一個30秒的超時等待,但在正常情況下,等待應該始終是< 1秒。我想用ByteMan或類似的東西先等待1秒超時,如果等待超時,則進入調試器。

回答

2

這個問題的海報做正是我一直在尋找:Secure Debugging for Production JVMs

它再現了DebugBreak最大的特點,那就是你只能後的「斷點」被打附加IDE到您的程序。

3

不是您的問題的直接答案,但在大多數IDE中,您可以設置conditional breakpoints

這將要求您在超時前在代碼中設置時間戳變量,並在超時後在斷點中測試其值。如果增量大於閾值,則會觸發斷點。

+0

我試圖讓這個「可重複使用」,這樣我就不必修改代碼,所有的時間jar文件。如果時間戳變量是通過字節碼操作注入的,我懷疑IDEA會讓我在斷點狀態下使用它。不錯的建議,但我會嘗試。 –

1

我創造了這個類

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