Visual Studio を使用してネイティブ アプリケーションを開発しています。コードに __asm int 3 または __debugbreak を使用して配置されたプログラム ブレークポイント (アサート) があります。ヒットしたときに、同じデバッグセッションでの連続したヒットがデバッガーに侵入しないように、それを無効にしたい場合があります。これどうやってするの?
Suma
質問する
8684 次
2 に答える
33
x86 / x64
x86/x64 アプリケーションを作成していると仮定すると、ウォッチ ウィンドウに次のように記述します。
x86:*(char *)eip,x
x64:*(char *)rip,x
INT 3 のオペコードである値 0xcc が表示されます。これを NOP のオペコードである 0x90 に置き換えます。eip をアドレスとしてメモリ ウィンドウを使用することもできます。
クリック課金制
PPC アプリケーション (Xbox 360 など) を作成していると仮定すると、ウォッチ ウィンドウに次のように記述します。
*(int *)iar,x
値 0xfeNNNNNN が表示されるはずです。これはトラップのオペコードです (ほとんどの場合、0x0fe00016 = 無条件トラップ)。これを NOP のオペコードである 0x60000000 に置き換えます。
于 2008-09-22T14:43:45.483 に答える
4
次のようなことを試してみてください:
#define ASSERT(x) {\
if (!(x)) \
{ \
static bool ignore = false; \
if (!ignore) \
{ \
ignore = true; \
__asm int 3 \
} \
}\
}
これにより、デバッグが 1 回だけヒットするはずです。ユーザーにメッセージ ボックスを表示して、何をすべきかを尋ねることもできます: continue (何も起こらない)、break (int 3 が呼び出される)、または無視 (ignore が true に設定され、ブレークポイントは二度とヒットしません)。
于 2011-06-03T14:40:55.803 に答える