2012-03-08 8 views
12

例外をスローする関数があるとします。この関数がサードパーティのDLLによって呼び出され、サードパーティのDLLが私がスローした例外を処理すると仮定します。Visual Studioは「ユーザーコード」とは何を考えますか?

サードパーティ製のDLLが「ユーザーコード」ではないと判断した場合(下の図のように)、後で処理されるにもかかわらず、デフォルトで例外が停止します。これは正確にはではありません。です。例外がユーザーコードによって未処理のであることが明確に説明されています。しかし、Visual StudioでDLLを「ユーザーコード」と呼びかけるものは何ですか?

enter image description here

は、私はシンボルが読み込まれていないため、この問題が発生したという説があったが、シンボルをロードしているが、それでも「ユーザーコード」と見なされていないリスト内のモジュールがあります。

+0

他のモジュールのウィンドウは、[デバッグ]メニューの[Windows]を選択し、[モジュール]をクリックします。 .dllが使用されているところを追跡するのに便利な表示です(参照されたプロジェクトの出力ではなく、GACのlibのコピーを使用していたため、私のコードはデバッグできませんでした)。 – RyanfaeScotland

答えて

12

はい、.pdbファイルがないと、デバッガはユーザーコードであるかどうかを判断できません。 MSDN articleに合理的に説明されています

は、非ユーザーコードからユーザーコードを区別するために、マイコードのみが三つになります。DBGファイル、PDBファイル、および最適化。

標準のDebugビルドでは、最適化がオフになり、すべてのモジュールに対してデバッグシンボルが作成されます。デバッグビルドを実行すると、それらのモジュールはユーザーコードとみなされます。ただし、ライブラリ関数を呼び出して最適化され、デバッグシンボルを持たない場合は、ユーザーコードではありません。 Just My Codeは、通常はデバッグに興味のあるコードではないライブラリコードのブレークポイントで実行が停止するのを防ぎます。 [Breakpoints]ウィンドウでは、[Disabled Breakpoint]アイコンが表示されます。

+0

これは完璧です。これを念頭に置いて、[ライブラリ内のすべての例外に対してデバッガが停止しないようにする](http://stackoverflow.com/a/9616890/33080)の回答を投稿し、[NUnitの 'Assert.Throws 'halting](http://stackoverflow.com/a/9609494/33080)。ニース! –

+0

これはまだ曖昧です。私は "User code = No optimization + debug symbols"と言っても間違いないと思いますか? –

関連する問題