Question

J'utilise Visual Studio pour développer une application native. J'ai placé un point d'arrêt programmatique (assert) dans mon code, à l'aide de __asm ??int 3 ou __debugbreak. Parfois, lorsque je clique dessus, je souhaite le désactiver afin que les hits successifs de la même session de débogage ne fassent plus irruption dans le débogueur. Comment puis-je faire cela?

Était-ce utile?

La solution

x86 / x64

En supposant que vous écriviez une application x86 / x64, écrivez ce qui suit dans la fenêtre de surveillance:

x86: * (char *) eip, x

x64: * (char *) rip, x

Vous devriez voir une valeur 0xcc, qui est l'opcode pour INT 3. Remplacez-la par 0x90, qui est opcode pour NOP. Vous pouvez également utiliser la fenêtre de mémoire avec eip comme adresse.

PPC

En supposant que vous écriviez une application PPC (par exemple, une console Xbox 360), écrivez comme suit dans la fenêtre de surveillance:

* (int *) iar, x

Vous devriez voir une valeur 0xfeNNNNNN, qui est un opcode pour trap (le plus souvent 0x0fe00016 = trap inconditionnel). Remplacez-le par 0x60000000, qui est un opcode pour NOP.

Autres conseils

Vous pouvez essayer quelque chose comme ceci:

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

Ceci ne devrait lancer le débogage qu’une seule fois. Vous pouvez même montrer une boîte de message à l’utilisateur et lui demander quoi faire: continuer (rien ne se passe), break (int 3 est appelé) ou ignore (ignore est défini sur true, le point d’arrêt n’est plus touché).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top