明示的にアプリケーションをクラッシュするクリーンな方法?

StackOverflow https://stackoverflow.com/questions/3626139

  •  26-09-2019
  •  | 
  •  

質問

私のアプリケーションが持つカスタムクラッシュハンドリングビルトイン( 『デバッグWindowsアプリケーション』についてのジョン・ロビンズ優れた書籍を参照してください)。この機能をテストするために、私はいつもにDebugBreak(Windowsの機能を使用)、これは常に完全に働きました。しかし、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で、アプリケーションをクラッシュさクリーナーの方法は、

がありません
役に立ちましたか?

解決

ちょうどそれらの試みとコール1いくつかのメンバ関数を持つオブジェクトへのNULLポインタを作成しますか?あなたが知っているので、多分機能でそれをやってdaoes

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

確かに最も簡単な方法と

に行くかなり明確いただきました!

他のヒント

あなたは()の代わりにDebugBreakの __debugbreak()固有に使用することができます関数。これは、

EXCEPTION_BREAKPOINTを使って何とクラッシュを言っていません。

RaiseException()には、さらに別のありますクラッシュへの道ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top