1

私のアプリケーションにはカスタムのクラッシュ処理が組み込まれています (「Windows アプリケーションのデバッグ」に関する John Robbins の優れた本を参照してください)。この機能をテストするために、私は常に Windows 関数 DebugBreak() を使用しましたが、これは常に完全に機能しました。しかし、Windows 7 以降、この関数を呼び出すと、「ブレークポイントに到達しました」と表示され、クラッシュ ハンドラを呼び出さずにアプリケーションが停止します。

クラッシュ機能をテストするために、いつでもこのコードをアプリケーションに入れることができます。

int *ptr = (int *)0xdeadbeef;
*ptr = 123456789;

または、0xdeadbeef が有効なアドレスである場合に備えて、いくつかのケースを追加することもできます。

int *ptr = (int *)0xdeadbeef;
*ptr = 123456789;
ptr = (int *)0L;
*ptr = 123456789;
ptr = (int *)0xffffffff;
*ptr = 123456789;

しかし、私は疑問に思っていました: Windows でアプリケーションをクラッシュさせるよりクリーンな方法はありませんか?

4

2 に答える 2

1

DebugBreak() 関数の代わりに __debugbreak () 組み込み関数を使用できます。これは何も言わず、EXCEPTION_BREAKPOINT でクラッシュします

RaiseException()は、クラッシュするもう 1 つの方法です。

于 2011-04-03T02:15:58.527 に答える
1

いくつかのメンバー関数を使用してオブジェクトへの null ポインターを作成し、そのうちの 1 つを試して呼び出すだけですか? そして、おそらく関数でそれを行うので、それが何を意味するかがわかります

void CrashApp()
{
    MyObject * ptr = 0;
    ptr->Function();
}

間違いなく最も簡単な方法で、何が起こっているのかがかなり明確です

于 2010-09-02T10:24:18.327 に答える