私はあなたの不満を想像することができますが、あなたの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では表示されません)。
サイドノート:フロー制御として例外を使用しない他のライブラリを使用することを強くお勧めします。 C#でInvalidCastExceptionを引き起こす理由はありません( 'is'は例外をスローするほど速くなります)。 –
私は、 'is'と' as'が型を扱うのにはるかに良い手段であることに同意します。私が参照していた 'InvalidCastException'は、LINQ拡張を介して.Cast <>()を使う行に沿っていました。より良い、より一般的な例は、 'NullReferenceException'でした。 –