私のアプリケーションにはカスタムのクラッシュ処理が組み込まれています (「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 でアプリケーションをクラッシュさせるよりクリーンな方法はありませんか?