2011-01-15 4 views
1

アプリで例外がスローされると、デバッガが動作を停止してデバッグモードに入ることが期待されますが、デバッグモードにはなりません。代わりに、私はただイミディエイトウィンドウ( '最初のチャンスの例外...')でメッセージを取得し、何も起こっていないかのようにプログラムを実行し続けます。ただし、例外がスローされたサブが終了するため、例外後のステートメントは実行されません。このサブプログラムは私のプログラムの初期化を行うので、実行は非常に不安定になります。最初のチャンスの例外を取得するとアプリが停止する

例外がスローされたときに実行を停止するようにデバッガに指示する方法を教えてください。

(私はVB 2010を使用し、デバッガの任意の設定を変更しませんでした。)

UPDATE:迅速な答えを
感謝。残念ながら、私はまだそれを私が望むように得ることはできません。

  1. 「Advenced compile options」ページには、「Target CPU」がありません。多分私はVB Expressしか持っていないのでしょうか?
  2. [デバッグ]> [例外]の[スロー]チェックボックスをオンにすると、その例外のキャッチがあっても実行が停止し、その実行を中止します。

これまで私はVB 2008を32ビットで使用していましたが、すべてうまくいきましたが、2010年に64ビットに移行して以来、私は正しいことができません。助言がありますか?

+0

次のMSDNブログ記事には、あなたを助けることがあります。http://blogs.msdn.com/b/davidklinems/アーカイブ/ 2005/07/18/440150.aspx – MicSim

+0

64ビット版のWindowsを実行していますか? –

答えて

1

Debug +例外では、「共通言語ランタイム例外」のThrownチェックボックスをオンにします。デバッガは最初のチャンス通知を停止します。

通常、原因はコード内のcatchステートメントです。VB.NET On Errorステートメントです。または、64ビットデバッガのWindowsフォームとの対話のバグ。破損した後、Debug + Windows + Callスタックを使用して、フォームのLoadイベントハンドラがコールスタック上にあるかどうかを確認します。このバグは、未処理の例外を診断なしで飲み込む原因となります。

これを回避するには、[プロジェクト+プロパティ]、[コンパイル]タブ、スクロールダウン、[高度なコンパイルオプション]を使用します。ターゲットCPUの設定を「x86」に変更します。 VS2010プロジェクトのデフォルト設定はbtwです。 32ビットデバッガを使用しますが、この問題はありません。そして、あなたはEdit + Continueを使うことができます。

+0

Windowsチームの正式な言葉は、これはバグではないということです。 x64プラットフォームは例外の伝播を「正しい」方法で処理しています。おそらく、x86はこれまでに何年も間違っていたと思われる。誰かがユーザーの期待を破ることを知らせるのを忘れていたのは、バグとも呼ばれています。回避策は+1してください。 –

+0

@Cody:私の能力をMVPとして活用する時間。リンクがありますか? –

+0

[Connect](https://connect.microsoft.com/VisualStudio/feedback/details/357311/silent-exceptions-on-x64-development-machines)に掲載されています。彼らは "外部"としてバグを閉じました。ポストの公式MSのコメントを見てください。それ以来、私はそれ以上の議論を見ていません。 –

0

ターゲットCPUオプションを取得するには、VS2010 Expressでエキスパート設定を選択する必要があります。 [ツール|オプション]に移動し、エキスパート設定を確認します。

1

私は、これは古いスレッドです知っているが、私は私が私のフォームの起動時に非常に同様の問題に直面していた

...それは他の人を助けることを願っています。 「ロードイベント」ではなく、「表示されたイベント」にコードを入れて解決しました! 予期したとおりに例外が発生し、コードが暗黙に終了しないということです。

私はそれらが異なるイベントであることは知っていますが、私にとっては何の変化もありませんでした。

ところで、私のENV:それはVS 2003のためだけれどもVB.netエクスプレス2010 Win7の64ビット