2011-08-01 25 views
10

Estoy buscando una forma de entrar en el depurador desde el código de Java, sin establecer un punto de interrupción en el IDE.DebugBreak equivalente en Java?

En Win32 había DebugBreak(), en C# hay DebugBreak() Equivalent in C#, pero no puedo encontrar nada en Java.

Lo que estoy tratando de hacer: decir que tengo que esperar con un tiempo de espera de 30 segundos, pero en condiciones normales esa espera siempre debe ser < 1s. Me gustaría usar ByteMan o algo similar para esperar primero con el tiempo de espera 1 y entrar en el depurador si se agota el tiempo de espera agotado.

Respuesta

2

El cartel de esta pregunta ha hecho exactamente lo que estaba buscando: Secure Debugging for Production JVMs

Se reproduce la mejor característica de DebugBreak, es decir se puede conectar el IDE a su programa sólo después de que el "punto de ruptura" es golpeado.

3

No es una respuesta directa a su pregunta, pero en la mayoría de los IDE puede establecer conditional breakpoints.

Esto requeriría establecer una variable de marca de tiempo en su código antes del tiempo de espera y probar su valor en su punto de interrupción, después del tiempo de espera. Dispara su punto de corte condicional si el delta es mayor que su umbral.

+0

que estoy tratando de hacer este "reutilizable", por lo que no tengo que modificar el código todo el tiempo. Si la variable de marca de tiempo se inyectó a través de la manipulación de código byte, dudo que IDEA me permita usarlo en una condición de punto de interrupción. Buena sugerencia, lo intentaré. –

1

creé esta clase

import com.sun.jna.Library; 

public interface Kernel32 extends Library { 

    public void OutputDebugStringA(String Text); 
    public void DebugBreak();  
} 

luego lo usaron como esto:

Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class); 
lib.OutputDebugStringA("just before DebugBreak\n"); 
lib.DebugBreak(); 

y eso es todo. Se llama a la función nativa void WINAPI DebugBreak(void); dentro Kernel32.dll

También es necesario el archivo jar jna-4.4.0.jar