10

アプリケーションのクラッシュ ダンプをデバッグできるかどうかをテストしたいと考えています。しかし、まず、アプリケーションのクラッシュ ダンプを生成する必要があります。私は C# を使用してアプリをコーディングしており、多くの例外や安全でないコードなどを試しましたが、取得できません。

ありがとう!

編集:申し訳ありませんが、何かを忘れてしまいました.Unity3Dでアプリケーションを作成しています.Unity3Dは例外を自動的に処理します.

編集 2:ご回答いただきありがとうございます。標準の C# アプリケーションであなたの提案をテストしましたが、すべて正常に動作しますが、Unity3D アプリケーション (C# で作成) では動作しません。Unity3D がクラッシュを引き起こすには、より多くの労力が必要なようです。Unity3D にメールして回答を得るかもしれません。入手できたらここに掲載します。乾杯!

4

14 に答える 14

23

以下は未処理の例外を提供し、デバッガーを選択するように求めます。

System.Diagnostics.Debugger.Launch()
于 2013-08-01T14:25:45.957 に答える
11

例外をスローします:)

throw new Exception("Your exception here!");
于 2013-08-01T14:26:48.320 に答える
8

良い。実際に CLR を 100% クラッシュさせる唯一の適切な方法は、マネージ ワールドにネイティブ例外を挿入することです。

Kernel32.dll の RaiseException() を直接呼び出すと、すべての C# アプリケーションと Unity エディターが即座にクラッシュします。

[DllImport("kernel32.dll")]
static extern void RaiseException(uint dwExceptionCode, uint dwExceptionFlags,  uint nNumberOfArguments, IntPtr lpArguments);

void start()
{
    RaiseException(13, 0, 0, new IntPtr(1));
}

ハッピークラッシュ。ネイティブとマネージドをデバッグするには、実行中の Visual Studio の 2 つのインスタンスが必要になることに注意してください。ネイティブ P/INVOKE プラグインを開発している場合は、Visual Studio インスタンス 1 がネイティブ デバッガーであり、Unity または C# プログラムをホスト プログラムとして使用するように設定し、別の Visual Studio インスタンスからホスト プログラムにアタッチします。

于 2016-08-22T22:12:49.803 に答える
8

Unity3Dの C# の場合

ありますUnityEngine.Diagnostics.Utils.ForceCrash(Unity 2018.3)

これは、次のForcedCrashCategory列挙型パラメーターのいずれかと一緒に使用できます。

アクセス違反

無効なメモリ アクセスを実行すると、クラッシュが発生します。無効なメモリ アクセスは、各プラットフォームで次のように実行されます。

致命的な誤り

Unity のネイティブの致命的エラー実装を使用してクラッシュを引き起こします。

アボート

abort() 関数を呼び出してクラッシュを引き起こします。

PureVirtualFunction

純粋仮想関数を呼び出して例外を発生させることにより、クラッシュを引き起こします。


Unityの古いバージョンの場合:

UnityEngine.Application.ForceCrash(int mode)

さらに古いバージョン (Unity 5) の場合:

UnityEngine.Application.CommitSuicide(int mode)

私の経験から、モード 0 は「ユニティ ハンドリング」クラッシュ (Unity クラッシュ ダイアログが表示される場所) を引き起こし、モード 2 は Windows エラー ダイアログが表示される「ハード」クラッシュを引き起こします。

これは、Smilediver による次の投稿と一致しているようですmode

0 - クラッシュをシミュレートします。1 - Unity がキャッチした致命的なエラーをシミュレートします。2 - abort() を呼び出します。

(これらのメソッドは、Unity の内部使用を目的としたものであるため、文書化されていません[Obsolete]。Unity のバージョンによってはマークされている場合もあります。)

于 2019-08-16T16:22:29.970 に答える
5

それを行う確実な方法は次のとおりです。

ThreadPool.QueueUserWorkItem(new WaitCallback(ignored => 
{
   throw new Exception();
}));

他のすべては、最上位の ApplicationDomain.OnUnhandledException などで処理できます。

これはそれを殺します(.NET 2.0以降を想定し、「legacyUnhandledExceptionPolicy」を使用していない場合:http://msdn.microsoft.com/en-us/library/ms228965.aspx)。

于 2013-08-02T14:16:31.177 に答える
0

探していた方法でアプリをクラッシュさせる答えはありませんでした。だからここに私のために働いたアプローチがあります。

    private void Form1_Load(object sender, EventArgs e)
    {
        object p = 0;
        IntPtr pnt = (IntPtr)0x123456789;
        Marshal.StructureToPtr(p, pnt, false);
    }
于 2016-03-15T08:48:58.440 に答える
-1

null ゲーム オブジェクトを変換しようとすると、簡単に再現できます。たとえば、次のようにします。

public static GameObject gameObjectCrash;
public void GenerateCrash()
{
    gameObjectCrash.transform.rotation = Quaternion.Euler(90, 0, 0);
}
于 2019-03-07T12:59:43.113 に答える