Как отключить программную точку останова/утверждение?

StackOverflow https://stackoverflow.com/questions/115237

Вопрос

Я использую Visual Studio, разрабатываю собственное приложение, у меня есть программная точка останова (утверждение) в моем коде, размещенная с помощью __asm ​​int 3 или __debugbreak.Иногда, когда я нажимаю на него, мне хотелось бы отключить его, чтобы последовательные попадания в одном и том же сеансе отладки больше не врывались в отладчик.Как я могу это сделать?

Это было полезно?

Решение

х86/х64

Предполагая, что вы пишете приложение x86/x64, напишите следующее в окне просмотра:

х86: *(char *)eip,x

х64: *(char *)rip,x

Вы должны увидеть значение 0xcc, которое является кодом операции для INT 3.Замените его на 0x90, который является кодом операции NOP.Вы также можете использовать окно памяти с eip в качестве адреса.

КПП

Предполагая, что вы пишете приложение PPC (например,Xbox 360), напишите следующее в окне часов:

*(int *)iar,x

Вы должны увидеть значение 0xfeNNNNNN, которое является кодом операции ловушки (чаще всего 0x0fe00016 = безусловная ловушка).Замените его на 0x60000000, который является кодом операции для NOP.

Другие советы

Вы можете попробовать что-то вроде этого:

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

Это должно попасть в отладку только один раз.Вы можете даже показать пользователю окно сообщения и спросить, что делать:продолжить (ничего не происходит), прервать (вызывается int 3) или игнорировать (для игнорировать установлено значение true, точка останова больше никогда не будет достигнута)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top