54

デバッグ中に未処理の例外が発生し、プログラムの実行が停止します。デバッガーに行が表示されないため、何を修正すればよいかわかりません。

タイプ ' ' の未処理の例外が でSystem.AggregateException発生しましたmscorlib.dll

追加情報: タスクの例外は、タスクの待機中またはその Exception プロパティへのアクセスによって観察されませんでした。その結果、監視されていない例外がファイナライザー スレッドによって再スローされました。

ローカルまたは引数 ' <this>' の値を取得できません。この命令ポインターでは使用できないためです。最適化されている可能性があります。 System.Threading.Tasks.TaskExceptionHolder

この問題のトラブルシューティング方法を教えてください。

かなり似ているこの質問も見つけました。

4

4 に答える 4

64

メッセージが示すように、未処理の例外をスローしたタスクがあります。

Break on All Exceptions (Debug, Exceptions) をオンにして、プログラムを再実行します。
これにより、最初にスローされたときの元の例外が表示されます。


(コメント追加): VS2015 (またはそれ以上)。[デバッグ] > [オプション] > [デバッグ] > [全般] を選択し、[マイ コードのみを有効にする] オプションの選択を解除します。

于 2012-06-20T14:46:52.393 に答える
11

例外を直接処理して、プログラムをクラッシュさせないようにすることができます (キャッチAggregateException)。内部例外を見ることもできます。これにより、何が問題なのかについてより詳細な説明が得られます。

try {
    // your code 
} catch (AggregateException e) {

}
于 2012-06-20T14:50:24.617 に答える
4

問題を簡単に再現できる場合は、受け入れられた回答が機能します。ただし、ベスト プラクティスとして、タスク内で実行されるすべての例外をキャッチ (およびログ) する必要があります。そうしないと、タスク内で予期しないことが発生した場合にアプリケーションがクラッシュします。

Task.Factory.StartNew(x=>
   throw new Exception("I didn't account for this");
)

ただし、これを行うと、少なくともアプリケーションはクラッシュしません。

Task.Factory.StartNew(x=>
   try {
      throw new Exception("I didn't account for this");
   }
   catch(Exception ex) {
      //Log ex
   }
)
于 2015-04-21T12:23:47.690 に答える