2017-01-07 17 views
0

私はこの正確なトピックについてたくさんのリソースとStackOverflowの質問を見つけましたが、Visual Studi0のかなり古いバージョン(例えば2012など)にしか適用されないようです -Visual Studio 2015+ C#/ .NETデバッガ:ハンドヘルド以外の例外を壊す方法

私の問題は、例外がUN-HANDLEDの場合にのみブレークします。公式のMSDNによれば、デバッガは「ファーストチャンス」例外と呼ばれるものを壊しています。つまり、例外が処理されても機能を停止することを意図しています。

私はtry-catchの中にラップしたInvalidCastExceptionをデバッガで破損させるのは非常に面倒です。デバッガに処理される可能性のある最初の例外を無視させるような方法はありますか?一般的な答えは、その特定のCLR Exceptionタイプの破棄を無効にすることですが、それは正直なところばかげた解決策です。私はどこにでも例外を押さえたくありません。私は、すでにそれを守っているときに例外がスローされたという通知を受けたくないだけです。

+1

サイドノート:フロー制御として例外を使用しない他のライブラリを使用することを強くお勧めします。 C#でInvalidCastExceptionを引き起こす理由はありません( 'is'は例外をスローするほど速くなります)。 –

+0

私は、 'is'と' as'が型を扱うのにはるかに良い手段であることに同意します。私が参照していた 'InvalidCastException'は、LINQ拡張を介して.Cast <>()を使う行に沿っていました。より良い、より一般的な例は、 'NullReferenceException'でした。 –

答えて

0

Visual Studio 2015では、[デバッグ] - [Windows] - [例外設定]に移動できます。ケースバイケースで自動的に中断する例外を定義します。 VSが例外のために壊れたときにこのウィンドウへのリンクもあります - ウィンドウの下部にある "Exception Settings"をクリックしてください。

私の家のコンピュータでは、 "Thrown"という列が1つしか表示されないので、未処理の例外だけをスローする方法はありません。しかし仕事では、私はあなたが話していることを正確に行うことを可能にする「未処理のユーザー」という2番目の列を持っています。 "未処理"のままにしておき "投げ捨て"をチェックしないと、未処理の例外のみが破棄され、捕捉された例外は破棄されません。私はこれがVisual Studio Professionalエディションの機能かもしれないと思います。私はCommunity Editionを自宅で使用しています。

+0

お返事ありがとうございます。これはソリューションの推薦を見るのとまったく同じですが、私のVSインストールのどこにも(仕事、自宅など)どこにも "User-Unhandled"という列はありません。 「Thrown」列のチェックを外すといくつかの例外が発生しますが、それでもまだ完璧な解決策ではありません。特に、WindowsのApp Storeで、未処理の例外がApp.g.csのDebugger.Breakまでスローされます。スタックを巻き戻そうとすると、時々本当に悪化することがあります。 –

-2

コードの#if <name>#endifの後に続く、リリースまたはデバッグの横に独自のビルド構成を定義できることに注意してください。たとえば、構成に応じて例外に集中するかどうかを決定できます。

2

私はあなたの不満を想像することができますが、あなたのVisualStudio設定には何か変わったことがあります。セットアップでは、VSは処理される例外を捕まえることはありません。VS2008からVS2015までのすべてのVSバージョンで真です。

出力ウィンドウに表示される "FirstChance exception"の行は、ハンドラがトリガされる前またはスタックが巻き戻される前に、まさにその時点で例外がスローされたという情報です。

しかし、は、VisualStudioの中断を意味しません。デバッガの出力には1つのライナだけが書き込まれ、プログラムは続行されます。スタックは巻き戻され、最も近いキャッチが実行され、プログラムは前方に実行されます。

ここでVS /デバッガ/ CLR 例外をスローすることができますが、オンにする必要があります。あなたはDebug-> Windows-> Exceptionsによってそこに行き、CTRL + D + Eを押すことができます。あなたがそれをクリックすると、新しいパネルが例外とそれらのそれぞれのための1つのまたは2つのオプションのリストで、表示される必要があります。

  • ブレーク未処理
  • ブレークを投げ

が、5月ということVSバージョンによって異なります。たとえば、VS Community 2015では、「スローされたときに中断する」だけがあり、「未処理」は表示されませんが、まだすべてがアクティブです。あなたは "未処理"の遮断をオフにすることはできません。

とにかく、重要なことは、デフォルトでは、すべての「未処理」が選択されていることと、「スローされたとき」はほとんどないことです。

  • いくつかのC++ "プラットフォーム:: XXXX" の例外
  • System.Reflection.MissingMetadata [< -C#]
  • System.Reflection.MissingRuntimeArtifactを:VS2015Communityでは、私は、デフォルトで設定された "スローされたとき" 以下を参照してください。 [< -C#]
  • System.Windows.Markup.XamlParseException [< -C#]
  • Javascriptの例外:アクセスが拒否されました、コード0x80070005と
  • 一部ManagedDebuggingA ssistants:LoaderLock、ContextSwitchを、...
  • いくつかのWin32の例外

、それがすべてです。たぶん10・20の非常に特殊なタイプの合計、私は数えませんでした。 「共通言語ランタイム」グループでは、の3つのがデフォルトでチェックされています。 InvalidCastExceptionsはありません。

VSがスローされた時点でVSがトリガーされている場合は、自分またはVSにアクセスしたユーザーが別の方法で構成したことを意味します。おそらく、その "ExceptionSettings"パネルでは、 "InvalidCastException"が "スローされたときに中断"とマークされています。そこに行き、 "InvalidCastExceptions"のチェックボックスの状態を見て、チェックを外して、やり直してください。

InvalidCastExceptionsの場合に役立ち、この問題が他のいくつかの例外でも発生する場合は、他のタイプのに対してこの問題を繰り返すことができます。をブレークオンする必要はありません。そして、はい、ある時点で、あなた(または他の誰か)がそこをクリックし、それらを壊すことをチェックしたことを意味します。

ブレイクオンスローにチェックされているものが多い場合は、それぞれをクリックする代わりにサブツリールートをクリックし、グループ全体をオンまたはオフにすることができます。 (btw。たぶんあなたは誤ってクリックして1週間前または1ヶ月前にグループ全体をチェックしたことがありますか?)

また、非常に便利な「Restore Defaults」の下線付きボタンと、「リストをデフォルト設定に戻す」ボタンそのうちのすべてをデフォルト設定にリセットします(上で書いたリストのように:C++、反映、Win32など)。

最後に、あなたはブレーク・オン・スロー ExceptionSettingsパネルのための選択を解除どんな例外、VisualStudioを、まだ未処理の例外でブレークします。 (別のセットのチェックボックスが表示されていない限り、「未処理」と表示されています。つまり、VS2010Proにはそのようなものがありましたが、VS2015Communityでは表示されません)。

+0

この詳細な回答ありがとうございます。私は、Windowsストアアプリケーション内の例外がどのように処理されるかについて、私の問題が関連していると考えています。例外が未処理のときはいつでも、 'App.g.cs'' Debugger.Break()'までスローされます。そこから、例外メッセージとともに変数 'e'があります。実際の違法行為者を見るためにスタックを移動するのはちょっと難しいかもしれません。 –

+0

@NickAlexander:aaahhh app.g.cs ...これは自動的に生成されます.. phuf ..その音です..不運 – quetzalcoatl

+0

@NickAlexander:しかし! App.g.csはapp.xamlが変更されたときにのみ更新されます。その 'app.g.cs'ファイルを開いて、それを編集してください。つまり、debugger.Break()'行をコメントアウトし、BUILD (**再構築しないで、 'CLEAN'フェーズを起動しないでください)アプリケーションを起動する必要はありません - 'BUILD'がapp.g.csを元に戻す原因になっていないか確認してください。行はコメントアウトされたままになります – quetzalcoatl

0

VS VS2015のように、それは古いVSのバージョンと同様に未処理の例外を有効/無効にするオプションを持っていますが、それは彼自身の機能があります:私たちは未処理の例外をキャプチャしたいのであれば

enter image description here

を、我々チェックボックスを無効にすることができます。

私が処理されます最初のチャンス例外を無視するようにデバッガを強制することができます方法はありますか?

どこでも例外を抑制したくありません。私は、すでにそれを守っているときに例外がスローされたという通知を受けたくないだけです。

しかし、あなたはまだ処理される第1の変化例外メッセージを取得したい場合は、例外がキャッチされる場合は、この時点で、デバッガは(知らないので、それは、この問題に対する優れた回避策を持っていませんチェックボックスを有効にすると、最初の例外がキャプチャされます(アプリケーションで最初に例外がスローされた場合、これは「最初のチャンス」例外として分類されます)。

参考:

https://blogs.msdn.microsoft.com/visualstudioalm/2015/02/23/the-new-exception-settings-window-in-visual-studio-2015/

https://blogs.msdn.microsoft.com/visualstudioalm/2015/01/07/understanding-exceptions-while-debugging-with-visual-studio/#unhandled

関連する問題