Эквивалент DebugBreak в Java?
Я ищу способ проникнуть в отладчик из кода Java, не устанавливая точку останова в среде IDE.
В Win32 был DebugBreak()
, в С# DebugBreak() эквивалентен в С#, но я ничего не могу найти в Java.
То, что я пытаюсь сделать: скажем, у меня есть ожидание с тайм-аутом 30 с, но в нормальных условиях ожидания всегда должны быть < 1s. Я хотел бы использовать ByteMan или что-то похожее на ожидание с 1-секундным таймаутом и перерыв в отладчик, если это время ожидания.
Ответы
Ответ 1
Плакат этого вопроса сделал именно то, что я искал: Безопасная отладка для производственных JVM
Он воспроизводит наилучшую функцию DebugBreak
, то есть вы можете присоединить IDE к своей программе только после того, как будет нажата "точка останова".
Ответ 2
Не прямой ответ на ваш вопрос, но в большинстве IDE вы можете установить conditional breakpoints
.
Это потребует от вас установить временную отметку в вашем коде до истечения времени ожидания и проверить ее значение в точке останова после таймаута. Вы бы вызвали бы свою точку останова условным, если дельта больше вашего порога.
Ответ 3
Я создал этот класс
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
Вам также нужен файл jar jna-4.4.0.jar