2013-01-17 14 views
9

とデバッガの起動時にntdll.dllの中にブレークポイント私はVS2012を使用して、/デバッグデバッグモードで自分のアプリケーションを起動したとき、私はダイアログが出ます:VS2012:時々なし詳細

<blahblah.exe>が引き金となってきましたブレークポイント。

これは他の情報を含んでいないので、私は何が起こっているか見るために休憩します。ああ、しかし、私は "wntdll.pdbが読み込まれていない"と、問題の他の情報を取得します。コールスタックはntdll.dllをポイントし、私のアプリケーションがまだこの時点で実行を開始していないように見えます。

この時点でcontinueを選択すると、アプリケーション/デバッガは通常どおり続行されます。

これは非常に頻繁に発生します(10回のうち約7回の起動)。私はWindows 8(64ビット)とVisual Studio 2012をアップデート1で実行しています。

以前はWindows 7(64ビット)とVS2010を使用していましたが、この問題は発生しませんでした。この特定のプロジェクトは、作成されたバージョン(2010年)からアップグレードされているため、おそらくそれが問題の一部です。

誰でもこの問題に直面していますか?私はどこを探し始めるべきか分かりません。私は64ビットWindowsを実行していますが、私は32ビットアプリケーションを構築していることを言及する必要があります。

更新:

> [email protected]() Unknown 
    [email protected]() Unknown 
    [email protected]() Unknown 
    [email protected]() Unknown 
    [email protected]() Unknown 

私も、私は間違いなく何のブレークポイントはどこにでも手動でを設定していないことを、念のために、追加する必要があります。Microsoftシンボルサーバーを有効にした後 が、ここではコールスタックがどのように見えるかです私のコードで。

+0

すべてのWindows機能のシンボルを取得できるように、Microsoft Symbolサーバーを有効にします。まったく注釈を付けられていないコールスタックが得られます。それが助けにならないならあなたの質問に投稿してください。 –

+0

私はそれを試しましたが、私は設定を開き、 "すべてのシンボルを読み込む"を選択しなければならないことを認識しませんでした。 – tacospice

+0

この問題が発生したときに、> = 2バージョンのVSをマシンにインストールしましたか? – ManuelH

答えて

1

この厄介な問題は、Visual Studio内のバグに起因する:

何が起こっている私たちが正しく同時に異なるプロセスから複数のローダー ブレークポイントのイベントを処理していないということです。 OS は、デバッガがブレークポイント をインスタンス化して他の処理を実行する前に、プロセスが起動して実行中にローダブレークポイントをトリガしますが、 が実行される前にトリガされます。通常、これらは(少なくともシングル起動の場合は) を正常に無視します。この を回避するには、tools-> options-> debuggerの "1つのプロセスが中断したときにすべてのプロセスを中断する" チェックボックスを無効にします。また、これは の致命的なエラーではありません。私たちはちょうど内部breakpiontで停止しているし、あなたは ちょうど行くために再びF5をヒットすることができます。

それはとても簡単で、私たちが追跡し、VSで マルチ打ち上げの使用するためにはかなり低いので、私は上記の回避策を想定し、この が良いだろう修正されませんするつもりだということではありません競合状態です のブロックを解除するのに十分で、 のお客様からさらに多くのレポートが表示された場合は、これを再訪します。それはあなたに合理的に聞こえますか?

フィードバックに感謝します。

マルク・パイネのVisual Studioデバッガエンジニアリングマネージャー

出典:私は、Visual Studioデバッガ設定し、この中で「すべてのプロセスを破る一つのプロセス改」のチェックボックスを無効にするためのアドバイスに従っ

Microsoft Connect」今問題を取り除いた。

おそらく、このバグの同じ問題/不快感を報告する人がさらにいる場合は、マイクロソフトは最終的にそれを修正します。

+0

私の質問には生きています! – tacospice

+0

このバグはかなりの間私を悩ませていましたが、私は最近、Microsoft Connectの記事で深い検索を行った後でしか見つかりませんでした。私は今、この回避策が存在することを嬉しく思います。 – ManuelH

-1

最初の例外でデバッガに侵入したかどうかを確認してください。

「デバッグ/例外...」の下に表示されます。いずれかのボックスがチェックされているかどうかを確認してください。 (これは以前のVSのバリアントのメニュー位置でした - 私は現在VS 2012を持っていません) 有効にすると、アプリケーションによって正しく処理されても例外がスローされたときにデバッガがブレークします。無効にすると、例外が処理されない場合にのみデバッガがブレークします。何らかの例外がチェックされている場合は、チェックを外してこれが持続するかどうか確認してください。

3

デバッガでアプリケーションを実行すると、プロセスが開始されるとすぐに自動ブレークポイントがあります。このブレークポイントは、プロセスが実行を開始する前に、さらにブレークポイントを設定する機会を与えます。それが気に入らないのであれば、デバッガには通常、デフォルトのブレークポイントの初期値を無視するオプションがあります。たとえば、cdbthe option is -gです。

+0

好奇心を離れて、10のうち7つのケースだけが壊れるのはなぜですか?それは毎回壊れてはいけませんか? – OregonGhost

+0

@OregonGhost私はそれについて説明していません。しかし、ヒットしたブレークポイントはデフォルトの初期ブレークポイントです。最初のブレークポイントを尊重するか無視するかを設定できます。 –

0

私はちょうどしかし、これは私のコールスタックした、自分自身が同様の問題に遭遇した:私の場合は

ntdll.dll!LdrpDoDebuggerBreak() 
ntdll.dll!LdrpInitializeProcess() 
ntdll.dll!_LdrpInitialize() 
ntdll.dll!LdrInitializeThunk() 

、私のVisual Studioのソリューションは、起動するように設定これらのプロジェクトの3(およびデバッグと、いくつかのプロジェクトを持っています)の「複数のスタートアッププロジェクト」設定を使用します。

スタートアッププロジェクトの2つは(アンマネージド)C++であり、そのうちの1つはC#です。 C#プロジェクトのプロジェクトプロパティを開いて「ネイティブコードのデバッグ」を有効にすることで、この起動ブレークポイントを取り除くことができました。

"Enable native code debugging" checkbox

編集:どうやらこれは完全に私の問題を解決していなかった、それだけで大幅にそれが起こるの頻度を減少させました。しかし、私は同じ一般的な解決策がまだそれを修正するかもしれないと思います。

このソリューションの他のプロジェクトの1つは、バイナリをプロジェクトのTargetPathとして手動で指定することによって起動される、あらかじめ作成されたバイナリです。

プロジェクトのDebuggingプロパティページのDebugger TypeからNative Onlyを変更しても同様です。だから、

"Native Only" Debugger type

、実際に私のために問題を解決したのは、これらが表示されるの両方を変更します。