Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

x86/x64

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

x86: *(char *)eip,x

x64: *(char *)rip,x

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

КПП

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

*(int *)iar,x

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

Ответ 2

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

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

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