web-dev-qa-db-ja.com

mscorlib.dllで発生した「System.AggregateException」の修正方法

デバッガーでこのような問題が発生し、プログラムの実行が停止します。デバッガーには行が表示されないため、何を修正すればよいかわかりません。

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

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

ローカルまたは引数 ''の値を取得できません。この命令ポインターで使用できないためです。おそらく最適化されているためです。 System.Threading.Tasks.TaskExceptionHolder

問題のトラブルシューティング方法は?

私もこの質問を見つけましたが、これはかなり似ています ローカルまたは引数の値を取得できません。この命令ポインタでは使用できないため、おそらく最適化されているためです

44
javapowered

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

すべての例外(デバッグ、例外)でブレークをオンにして、プログラムを再実行します。
最初にスローされたときに、元の例外が表示されます。


(コメント追加):VS2015(またはそれ以上)。 Debug> Options> Debugging> Generalを選択し、「Enable Just My Code」オプションの選択を解除します。

52
SLaks

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

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

}
8
Darren

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

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
   }
)
4
helios456

私の場合、Edge.jsの使用中にこの問題を実行しました。すべての問題は、C#Edge.js関数定義内のJavaScript構文エラーでした。

0
Nono