重複の可能性:
VS2010は、64ビットバージョンのWindowsのWinFormsアプリケーションで未処理の例外メッセージを表示しません
VS2012をインストールして使い始めました。以前はVS2008Expressを使用していました。VS2012はWin764ビットで実行されています。(以前の開発環境はXP 32ビットでした)。
これまでのところ、基礎研究プロジェクト(WinForms、VB)を使用しており、VSが未処理の例外を無視していることがわかりました。この最後の行で例外が発生するはずです。
With cmd
.Connection = sqlConn
.CommandType = CommandType.StoredProcedure
.CommandText = "NameOfStoredProcedure"
.Parameters.Add("@TheParameterName", SqlDbType.Int, -1)
.Parameters("@TheParameterNameWithATypo").Direction = ParameterDirection.ReturnValue
案の定、イミディエイトウィンドウには次のように表示されます。
A first chance exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll
しかし、コードは実行を続けます!
[デバッグ/例外]ダイアログには、すべての種類の例外に対して[スロー]および[ユーザー未処理]チェックボックスがあります。「User-Unhandled」がすべてチェックされています。例外を処理し、処理された例外を中断したくないので、「スロー」にチェックマークを付けたくありません。(現在、Try ... Catchブロックはまったくありませんが、デバッガーはプロジェクト全体が1つに含まれているように動作しています)。
すべてのオプションなどを調べましたが、魔法の「例外の中断をオンにする」オプションが見つかりません。私が助けを求めているのは私のコードではありません-これが起こっていると、必然的に犯す愚かな間違いをデバッガーが検出することを信頼できなくなります。
誰かがこれに遭遇した別の質問を見つけました、そしてそこでの問題はWin64にあるようでした。しかし、VSはWin64では本当に使用できませんか?私はそれを完全に信じることはできませんが、未処理の例外を壊さないと、事実上使用できなくなります。
編集: すべてのコメントをありがとう。Neoliskのソリューションを試しましたが、2つのハンドラーの署名が異なるため、コードを少し変更する必要がありました。
Public Sub Main()
AddHandler Application.ThreadException, AddressOf ThreadExceptionHandler
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionHandler
Form1.Show()
End Sub
Friend Sub ThreadExceptionHandler(sender As Object, e As System.Threading.ThreadExceptionEventArgs)
End Sub
Friend Sub UnhandledExceptionhandler(sender As Object, E As System.UnhandledExceptionEventArgs)
End Sub
これはうまくいきました-ありがとう!ただし、アプリケーションフレームワークを無効にする必要がありました(そうしないと、アプリはサブメインをスタートアップとして使用できません)。そしてTBH私は.NETの初心者であり、その効果/長所/短所が何であるかを確実に知ることさえできません。私はあなたがすべて提供したリンクを読み、何が起こっているのかを理解しましたが、私がそれを避けることができれば関与したくありません...
幸い、KB976038の修正プログラムを適用することでうまくいきました。Form_Loadイベントを実行して、デバッグモードで例外と実行の中断を引き起こすはずのコードが、期待どおりにこれを実行するようになりました。これは、Application Frameworkが有効になっていて、Form1がスタートアップオブジェクトであり、上記のコードがコメントアウトされている場合です。
EDIT2: いいえ、その修正プログラムは機能しません。元の「不正なパラメータ名」の行が原因で、例外が発生してコードが停止しました。しかし、DBNull-> Int32変換例外のある後続の行で、このエラーボックスが発生しました(デバッグの可能性はありません)。
vshost.exe-アプリケーションエラー内部エラー:Debugger::HandleIPCEventで未処理の例外。イベントID=0x246例外コード=0x0000005、Eip=0x70d58101。プロセスID=0xbec(3052)、スレッドID = 0xb1c(2844)。
すべてのコメントに本当に感謝していますが、私の考えでは、これは大きな問題です。例外がデバッグ可能であると信頼できない場合、開発者はVSをどのように使用できますか?サブメインから始めて、何かを開発するたびにそれらの特別な行を入れることを覚えておく必要はありません。または、Form_Loadでコードを使用できないことを覚えていますか?Win764ビットを開発OSとして使用するのをやめることをお勧めします。