-
ExecutionEngineException StackOverflowException OutOfMemoryException
-
ExecutionEngineException StackOverflowException OutOfMemoryException
-
ExecutionEngineException StackOverflowException OutOfMemoryException
そして、これは正常な動作です。 なんで?
実験を行うことにし、Visual Studioをダウンロードして、最も単純なコンソールアプリケーションHello worldを作成しました。
using System; namespace HelloWorld { class Program { static void Main() { Console.Write("Hello world!"); Console.ReadKey(); } } }
このケースもコンパイルします 。 こちらからダウンロードできます。
Debuggin Tools For Windowsをダウンロードします 。
WinDbg
ユーティリティが必要です。
それを開いて、シンボル(pdbファイル)を追加します: ファイル->シンボルファイルパスと.pdbファイル
HelloWorld.pdb
を指定します。 また、他のアセンブリのシンボルをダウンロードする必要があるため、テンポディレクトリを作成し、
Symbol File Path
ウィンドウで次のようなものを指定します。
D:\WORK\Projects\Own\HelloWorld\HelloWorld\bin\Debug; SRV*D:\Temp\Symbols*http://msdl.microsoft.com/download/symbols
次に、アプリケーションを実行し(Visual Studioからの場合、デバッグモードではない場合)、WinDbgでプロセスに参加します。File-> Attach to a Process

コマンドを実行します:
.loadby sos mscorwks
sos.dll
拡張機能をダウンロードし、マネージコードのデバッグを許可するため。
メモリをダンプして、次のコマンドを実行します。
.dump /ma D:\Temp\HelloWorld.dmp
デバッグを停止できます: デバッグ->デバッグの停止
そして、メモリダンプを開きます。 ファイル->クラッシュダンプを開き 、
HelloWorld.dmp
を選択します。
次のコマンドを使用して、ダンプをフィルタリングして例外を確認します。
!dumpheap -type Exception
そして、私たちは何を見ますか? 例外は次のとおりです。
7093fd68 1 84 System.ExecutionEngineException 7093fd1c 1 84 System.StackOverflowException 7093fcd0 1 84 System.OutOfMemoryException

結論
これらの3つの例外(
ExecutionEngineException, StackOverflowException OutOfMemoryException
)は、アプリケーションの起動時に特別に作成されたもので、メモリ不足に陥り、
OutOfMemory
例外
OutOfMemory
スロー
OutOfMemory
た
OutOfMemory
などに対応します。 同様に、すでにスタックオーバーフローが発生している場合
StackOverflowException
ことはできません。これは、このためにコンストラクタを呼び出す必要があるためです。これは、既にオーバーフローしたスタックでは不可能です。
したがって、.netアプリケーションのメモリダンプを使用する必要がある場合、これらの例外を恐れないでください。.net環境は、十分なメモリがないか、バッファがいっぱいのときにそれらを転送します。