Эквивалент 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