Visual Studio:処理された例外を処理する方法


165

処理された例外が発生したときにVisual Studioを中断させたい(つまり、「最初のチャンス」メッセージを表示したくないだけでなく、実際の例外をデバッグしたい)。

たとえば、デバッガーを例外で中断させたい:

try
{
   System.IO.File.Delete(someFilename);
}
catch (Exception)
{
   //we really don't care at runtime if the file couldn't be deleted
}

私が出会ったこれらのVisual Studio.NETのための注意事項:

1)VS.NETで、[デバッグ]メニュー>> [例外...] >> [共通言語ランタイム例外] >> [システム]に移動し、[System.NullReferenceException]を選択します

2)ダイアログの下部に[例外がスローされたとき]グループボックスが表示されます。[デバッガーに割り込む]を選択します。

3)シナリオを実行します。例外がスローされると、デバッガーは停止し、「タイプ "System.NullReferenceException"の例外がスローされました。[ブレーク] [続行]」のようなダイアログで通知します。

[Break]を押します。これにより、問題の原因となっているコード行が表示されます。

ただし、Visual Studio 2005には適用されません([ デバッグ ]メニューに[ 例外 ]オプションはありません)。

Visual Studioでこのオプションダイアログがどこにあるのか、「例外がスローされたとき」グループボックスに「デバッガーに割り込む」オプションがあることを誰かが知っていますか?

更新:問題は、[ デバッグ ]メニューに[ 例外]項目がないことでした。メニューをカスタマイズして手動で追加しました。


9
VS2015では、Debug-> Windows-> Exception Settings
PeterVermont

いくつかの例外設定を変更した後、デフォルトの例外設定を復元する方法を見つけるのにしばらく時間がかかりました。そのため、新しい答えです。例外設定をデフォルトに戻す
Mabito

回答:


170

ソリューションを開いた状態で、[デバッグ-例外(Ctrl+ DE)]メニューオプションに移動します。そこから、スローされた例外またはユーザーが処理していない例外を解除することを選択できます。

編集:私のインスタンスはC#「プロファイル」で設定されていますが、おそらく他のプロファイルにはありませんか?


10
私にはそのようなオプションはありません。それは私の混乱を説明するでしょう。
Ian Boyd

58
デバッグメニューはありましたが、例外オプションはありませんでした。メニューをカスタマイズして手動で追加しました。ショートカットキーはどちらの方法でも機能しました(Ctrl + Alt + E)
Ian Boyd

3
また、「ツール」、「インポート設定のインポート」に移動してC#環境へのリセットを選択することで、
VS2010

14
Common Language Runtime Exceptions> <All Common Language Runtime Exceptions not in this list>をVisual Studio 2017の下で選択しました。私の夢のような夢がすべて実現しました。
アーロンニュートン

9
Visual Studio 2015:デバッグ->
Windows-

47

VS2005には「例外」ウィンドウがあります。デバッグ時にCtrl+ Alt+を試しEて、停止する例外の[スロー]チェックボックスをクリックしてください。


それがまさに私が欲しいものです。メニューのどこにありますか?私の人生のために、私はそれを見つけることができません。
イアン・ボイド

キーボードショートカットはプロファイルに応じて変更できます(C#開発者、C ++開発者など)
Asaf R

1
メニュー項目があります:デバッグ->例外。これはVS2005 Professionalに対応しています。Expressエディションを実行していますか?
Rob Walker、

5
[例外]メニュー項目が必要な場合:[ツール] | [選択]を選択します。カスタマイズ...コマンドタブをクリックします。[カテゴリ]ボックスで[デバッグ]カテゴリを選択します。[例外...]コマンド項目を見つけ、それをアプリケーションの上部の[デバッグ]メニューにドラッグし、メニューの適切な場所にドロップします。(コメントにあります:blogs.vertigo.com/personal/keithc/Blog/archive/2007/07/20/…
sotto

33

期待設定のための新しい場所を見つけるために私にしばらく時間をかけた、それゆえ新しい答え。

Visual Studio 2015以降、停止する例外は[例外設定]ウィンドウ([デバッグ]-> [ウィンドウ]-> [例外設定])で制御します。ショートカットはまだですCtrl- - 。AltE

カスタム例外を処理する最も簡単な方法は、「このリストにないすべての例外」を選択することです。

これが英語版のスクリーンショットです。

ここに画像の説明を入力してください

これはドイツ語版のスクリーンショットです:

ここに画像の説明を入力してください


16

Visual Studio 2015以降では、[例外設定]ダイアログ(Ctrl+ Alt+ E)に移動し、[ 共通言語ランタイム例外](または必要な特定の例外)をチェックして、処理時ArgumentNullExceptionに中断する必要があります例外あります。

ステップ1 ステップ1 ステップ2 ステップ2


8

デバッガーによる例外の管理の確認ページでの。この設定方法が説明されています。

基本的に、ここにステップがあります(デバッグ中):

  1. [デバッグ]メニューの[例外]をクリックします。

  2. [例外]ダイアログボックスで、例外のカテゴリ全体([共通言語ランタイム例外]など)に対して[スロー]を選択します。

    -または-

    例外のカテゴリー(例えば、共通言語ランタイム例外)のノードを展開し、そのカテゴリー内の特定の例外に対して「スロー」を選択します。


1

私が使っているテクニックは次のようなものです。デバッグ対象に応じて、1つまたは複数のtry catchブロックに使用できるグローバル変数を定義し、次の構造を使用します。

if(!GlobalTestingBool)
{
   try
   {
      SomeErrorProneMethod();
   }
   catch (...)
   {
      // ... Error handling ...
   }
}
else
{
   SomeErrorProneMethod();
}

IDEで中断させたくないいくつかの例外がまだあるので、これによりテストの点でもう少し柔軟性が得られることがわかります。


3
これは便利なテクニックです。処理された例外を未処理の例外に変換するため、デバッガーは自動的に停止します。GlobalTestingBoolを設定する適切な方法がない場合を除いて、なぜそれが反対票だったかはわかりません。別の、おそらくより良いオプションは、Debugger.IsAttachedを使用することです。
ジョーホワイト

すべてのtry / catchの周りにこれを追加して、コードを再コンパイルする必要があります。すでに何かをデバッグしている最中はあまり役に立ちません。
最大

例外は、例外的な条件(許容できないもの)がある場合にコードでスローする必要があり、その処理方法を決定できるレベルでキャッチする必要があります。このようなコードは実行パスを複雑にします。
Lee Oades、

私はこれが本当に古い答えであることを知っていますが、私のようなランダムなグーグルの場合は追加できますcatch(){/*handle or not*/ throw; } // throw without any exception specified will rethrow original exception with original callstack etc
Jan 'splite' K.

0

オンラインのドキュメントは少し不明瞭なようですので、少しテストを行いました。[例外]ダイアログボックスから[スロー]で中断することを選択すると、プログラムの実行が、処理または未処理の例外で中断します。処理された例外のみでブレークしたい場合は、コードを調べて、処理されたすべての例外にブレークポイントを設定するのが唯一の手段のようです。これは少し過剰に見えるので、例外を処理するときはいつでもデバッグ文を追加した方がよい場合があります。次に、その出力が表示されたら、コードのその行にブレークポイントを設定できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.