2017-06-20 38 views
2

私のC++アプリケーションでVS2015デバッガを使用しています。私がアプリケーションを起動すると、デバッガはメッセージを返しますPDBが一致しません。

Loaded 'C:\MyDir\Working\x64\Debug\MyApp.exe'. Cannot find or open the PDB file 

結果として、私はブレークポイントを設定することができません。

.exeファイルと同じディレクトリに.pdbファイルがありますが、VSデバッガによれば一致しません。また、WidDBG Symchkにも準拠しています。 Symchkは、/ vオプションを指定しても、不一致の理由を指定しません。

完全に再構築しても、この問題は解決しません。それはデバッグビルドのためだけに発生しており、今日から始まったばかりです。今日までは、pdbのミスマッチには問題はありませんでした。私が使用しています

VSのオプションは次のとおりです。

  • C++:デバッグ情報の形式=プログラムデータベース(/ Zi)、プログラムデータベースファイル名= $(IntDir)%(ファイル名).PDB。
  • リンカ:デバッグ情報を生成する=デバッグ用に最適化する(/ DEBUG)、プログラムデータベースファイルを生成する$(OutDir)MyApp.pdb、フルプログラムデータベースファイルを生成する=はい。

個々のオブジェクトのpdbファイルは中間ディレクトリに表示され、MyApp.pdbはMyApp.exeと共に出力ディレクトリに表示されます。

ここで奇妙な部分があります。既存のMyApp.pdbを削除してから再リンクすると、新しい.pdbファイルが出力ディレクトリに現行のmod時間で表示されます。リンカが実行されている間、pdbファイルは大きくなり(〜70 MB)、リンカが完了するとpdbファイルは突然小さくなり(〜4 MB)、今日mod時間は数時間前に変わります。これは非常に疑わしく、おそらくpdbの不一致を説明します。

リンカの最終出力ラインは

どのように私はデバッグビルドの一致と正しいPDBファイルを生成するためにVSを強制することができますか?

答えて

3

更新:問題は、pdbファイルMyApp.pdbが中間ディレクトリ(MyApp.cppのコンパイラによって作成されたpdbファイル)に作成されていることです。何らかの理由で、リンカは最後の "実際の" pdbファイルをこのファイルに置き換えます。同じ名前のMyApp.pdbがあるため、Symchkは名前の不一致を表示しません(明らかではないタイムスタンプの不一致があります)。

MyApp.cppのデバッグ情報を最終的なMyApp.pdbにどのように含めることができるのかは明らかではありません。

関連する問題