Pregunta

Estoy utilizando Visual Studio, el desarrollo de una aplicación nativa, tengo un programática punto de interrupción (assert) en mi código se coloca con la __asm int 3 o __debugbreak.A veces, cuando me golpeó, me gustaría desactivar de modo que los sucesivos éxitos en la misma sesión de depuración ya no interrumpir el depurador.¿Cómo puedo hacer esto?

¿Fue útil?

Solución

x86 / x64

Suponiendo que usted está escribiendo x86/x64 aplicación, escribir la siguiente en la ventana de inspección:

x86: *(char *)eip,x

x64: *(char *)rip,x

Usted debe ver a un valor 0xcc, que es el código de operación para INT 3.Reemplazar con 0x90, que es el código de operación para NOP.También puede utilizar la ventana de la memoria con el pae como una dirección.

PPC

Suponiendo que usted está escribiendo PPC aplicación (por ejemplo,Xbox 360), escribir la siguiente en la ventana de inspección:

*(int *)iar,x

Usted debe ver a un valor 0xfeNNNNNN, que es el código de operación de la trampa (más a menudo 0x0fe00016 = incondicional de la trampa).Reemplazar con 0x60000000, que es el código de operación para NOP.

Otros consejos

Usted podría intentar algo como esto:

#define ASSERT(x) {\
   if (!(x)) \
   { \
      static bool ignore = false; \
      if (!ignore) \
      { \
         ignore = true; \
         __asm int 3 \
      } \
   }\
}

Este debe golpear a la depuración sólo una vez.Usted puede incluso mostrar un cuadro de mensaje para el usuario y preguntarle qué hacer:continuar (no pasa nada), romper (int 3 se llama) o ignore (ignorar se establece en true, el punto de ruptura nunca es golpeado de nuevo)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top