2012-06-20 110 views
38

デバッガでこのような問題が発生し、プログラムの実行が停止します。デバッガは私にその行を表示しないので、修正するべきものがわからない。「System.AggregateExceptionがmscorlib.dllで発生しました」の修正方法

型「System.AggregateException」の未処理の例外は で発生したがmscorlib.dll

追加情報:タスクの例外(複数可)タスクの待機またはその例外プロパティにアクセスすることにより、いずれか を認められませんでした。 。 の結果、ファイナライザスレッドによって観察できない例外が再現されました。

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

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

私はまた、メッセージは、未処理の例外をスローしたタスクを持って、言うようにCannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away

+0

以前に問題のないコンソールアプリケーションがデバッグ実行中に中断されたとき、何とかこの問題が発生しました。 Visual Studioを終了して再オープンして問題を解決したら、それは正常に実行されました。これはすべての場合に役立ちますが、アプリケーションが正常に動作する場合は試してみる価値があります。 –

答えて

42

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

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


(コメント付き):VS2015(以上)。 デバッグ>オプション>デバッグ>一般を選択し、[自分のコードを有効にする]オプションの選択を解除します。

+2

この設定はどこですか?デバッグ>例外> ...? – mdupls

+3

@mdupls:すべてのCLR例外を解除します。 – SLaks

+1

すべてをチェックしてください。次に、「すべてリセット」を使用してデフォルト値に戻ります。 –

9

プログラムをクラッシュさせないように、例外を直接処理できます(AggregateExceptionをキャッチしています)。あなたはまた、内部例外で見ることができる、これはあなたに何が悪かったのかの詳細な説明を与える:あなたは簡単に問題を再現できるかどう

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

} 
+2

しかし、どのように問題を解決するには? –

+0

何か問題が生じた場合、通常、アプリケーションをクラッシュさせたいでしょう。すべての例外をキャッチするのではなく、問題の発生源に対処してください。 –

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 
    } 
) 
0

Edge.jsを使用している間、私はこの問題に走った - すべての問題は、C#Edge.js関数定義内のJavaScriptの構文エラーでした。

関連する問題