20

「 C++ で (舞台裏で) 例外がどのように機能するか」と同じですが、C#の場合です。

例外がスローされたときに、以下の手順を実行する必要があることを知っています。

  1. 例外の種類に最も近いハンドラーを見つけます。
  2. スタックをハンドラー レベルまで巻き戻します。
  3. ハンドラーを呼び出します。
  4. finallyすべてのブロックを見つけて呼び出します。

.NET はこれらの操作をどのように処理しますか? 「現在の」ハンドラーのマッピングはどのように機能しますか? try/catch ブロックで生成されるコードの量は? そして、スローブロックで?

4

2 に答える 2

4

Windows 上の .NET 例外は、ネイティブ コードと同じように、OS の基礎となる構造化例外処理(SEH) メカニズムを使用します。C(およびC ++)のリンクされた質問に記載されているとおり。

于 2010-09-21T14:47:43.830 に答える
3

.NET例外は、基盤となるWindows構造化例外処理の実装を使用しますが、これは必須ではありません。モノはそれを違ったやり方で行うかもしれません。

実際、例外をスローするだけの単一行のコンソールアプリを作成し、それをWindbgで実行すると、アンマネージ例外処理へのフックが表示されます。

于 2010-09-21T14:51:17.460 に答える