Эквивалент DebugBreak в Java? - PullRequest
       21

Эквивалент DebugBreak в Java?

14 голосов
/ 01 августа 2011

Я ищу способ проникнуть в отладчик из кода Java, не устанавливая точку останова в IDE.

В Win32 было DebugBreak(), в C # есть DebugBreak ()Эквивалентен в C # , но я не могу найти ничего в Java.

Что я пытаюсь сделать: скажем, у меня есть ожидание с тайм-аутом 30 с, но в нормальных условиях это ожидание всегда должно быть<1s.Я хотел бы использовать <a href="http://www.jboss.org/byteman" rel="noreferrer"> ByteMan или что-то подобное, чтобы сначала подождать с таймаутом в 1 с, и в случае отрыва ожидания в отладчике.

Ответы [ 3 ]

2 голосов
/ 13 февраля 2012

Постер этого вопроса сделал именно то, что я искал: Безопасная отладка для производственных JVM

Он воспроизводит лучшую функцию DebugBreak, то есть вы можете прикрепитьIDE для вашей программы только после нажатия "точки останова".

2 голосов
/ 01 августа 2011

Не прямой ответ на ваш вопрос, но в большинстве IDE вы можете установить conditional breakpoints.

Для этого потребуется установить переменную отметки времени в вашем коде до истечения времени ожидания и проверить ее значение в точке останова после истечения времени ожидания.Вы бы активировали условную точку останова, если дельта больше вашего порога.

1 голос
/ 11 августа 2017

Я создал этот класс

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

...