web-dev-qa-db-ja.com

デバッグ情報が見つからないか、Visual Studioの情報と一致しません

既存のプロジェクトをコピーし、フォルダーの名前を変更しました。アプリケーションをコンパイルしようとすると、このエラーが発生します

デバッグ情報が見つからないか、一致しません。シンボルがロードされていません。
デバッグを続行しますか?

[はい]をクリックすると、コンパイルして正常に実行されます。しかし今、私はそのメッセージに対処しなければなりません。私がプロジェクトのプロパティで何を変更して停止するかについて興味があります。

41
numerical25

主な理由は、一致するpdbとexeがないことです。

可能な解決策:

  • デバッグではなくリリースでコンパイルしている
  • クリーニング/ビルドまたは再構築する必要があります
  • Exeと同じディレクトリにpdbファイルが生成されていません
  • 一致しないpdbがあります。コピーされたソースは今日の日付よりも新しく、何かが適切に構築されていない可能性があります。
  • すべてのデバッグオブジェクトファイルを一掃してみてください
  • ビルドexeおよびpdbが存在する場所とは異なる場所から開始したプロセスにアタッチしています
  • Visual Studioを再起動します
30
Brian R. Bondy

あなたはおそらくあなたのプロジェクトのデバッグ情報を無効にしているでしょう:

  • プロジェクトを右クリック->プロパティ
  • 構成プロパティ->リンカー->デバッグ
  • [デバッグ情報の生成]を[いいえ]から[はい]に切り替えます

プロジェクトを再構築して再試行すると、メッセージなしで実行されるはずです:)

65

これは時々起こりますが、コードをデバッグして変更を加えているときに、Visual Studioがpdb情報をキャッシュしているように見えます。再構築ソリューションを実行し、pdbを削除して新しいものを作成しても、問題は解決しません。

もちろん、デバッグ情報を生成し、必要なものはすべて持っています。これは、特にコードを数回デバッグしているときに発生するためです。

Visual Studioは、メモリ内のpdbに満足しているようで、タイムスタンプやpdbのサイズの変更に関係なく、更新を拒否します。

これをリセットする唯一の方法は、Visual Studio(IDE)を終了し、再起動することです。

まれに、IDEがバックグラウンドで実行されている可能性があり(プロセスエクスプローラーはそこに表示されます)、ファイルのハンドルを開いたままにします。IDEを再起動する前にプロセスを強制終了できます。

幸運を

10
Miguel

VS2012でこのエラーが発生しました。これは間違いなくVisual Studioのバグが原因であり、メインプロジェクトのローカルPDBファイルが実行可能ファイル全体の最終PDBファイルと同じ名前である場合に明らかになります(2つが異なるディレクトリにある場合でも!)

この例を考えてみましょう。

ソリューションは、maina、およびbの3つのプロジェクトで構成されています。 mainは実行可能ファイルの最上位プロジェクトであり、abmainにリンクされたライブラリです。

3つのプロジェクトすべてで、$(IntDir)変数は$(SolutionDir)\$(Configuration)\$(ProjectName)\に設定されます。これは、プロジェクトmainがその中間ファイルを_Debug\main\_にダンプし、プロジェクトa-を_Debug\a\_にダンプすることを意味します。

_C/C++ -> Output Files_設定では、3つのプロジェクトすべてに$(IntDir)$(TargetName).pdbに設定された_Program Database File Name_値があります。これは、プロジェクトmainがローカルPDBファイルを_Debug\main\main.pdb_として生成し、プロジェクトbが_Debug\b\b.pdb_として生成することを意味します。

最後に、プロジェクトの_Linker -> Debugging_設定mainで、_Generate Program Database File_値が$(OutDir)$(TargetName).pdbに設定されます。これは、実行可能ファイル全体のグローバルPDBファイルが_Debug\main.pdb_として生成されることを意味します。

この設定では、各PDBファイルは独自の個別のディレクトリに生成されることに注意してください。

この設定では、デバッガーでプログラムを実行しようとするとデバッグ情報が見つからないか一致しませんエラーになります。そして、(存在する)_Debug\main.pdb_ファイルを見ると、_Debug\main\main.pdb_ファイルとまったく同じであることがわかります!つまりどういうわけかmainのローカルPDBは、最終的な実行可能ファイルのグローバルPDBであるはずだったものを上書きすることができました。つまりデバッガーはPDBファイルが「間違っている」と文句を言うのは正しいことです。それは確かに間違っています。

繰り返しますが、上記のセットアップでは、最終的なグローバルPDBが何らかの形で最上位プロジェクトのローカルPDBによって上書きされます。なぜ起こるのか分かりません。バグのようです。 (これらのPDBファイルは同じ名前であっても、異なるディレクトリに生成されることに注意してください。つまり、競合してはなりません。)

この問題を修正する回避策は、プロジェクトmainのローカルPDBに別の名前を付けることです。たとえば、mainプロジェクトの_C/C++ -> Output Files_に移動し、_Program Database File Name_値を$(IntDir)$(TargetName)_local.pdb(または$(IntDir)12345.pdbに変更します。 )。これにより、競合が解消され、問題が解決します。

7
AnT

次の方法でPDB作成を有効にします。

_MyProject > Properties > Debugging_を右クリックします。

  • C/C++ > General > Debug Information Output = Program Database (/Zi)
  • Linker > Debugging > Generate Debug Info = Yes (/DEBUG)

MyProjectをクリーンアップし、Visual Studioを再起動して(念のため)、MyProjectを再構築します。出力フォルダーには* .pdbファイルが含まれているはずです。

最適化/リリースコードをデバッグする場合は、最適化をオフにすることを検討してください

  • C++ > Optimization > Optmization = Disabled (/Od)
3
vasquez

私は同じ問題に直面し、上記のすべての解決策を試しましたが、それは私を助けることができませんでした。その後、新しいソリューションをランダムに見つけて、うまくいきました。

解決策は、ソリューションに多数のプロジェクトがある場合は、いずれかのプロジェクト(決定する必要がある特定のプロジェクト)を「スタートアッププロジェクトとして設定」としてマークすることです。その特定のプロジェクトを右クリックし、「スタートアッププロジェクトとして設定」をクリックします。

それは私のために働いた。

2
Piyush_Jain

pdbまたはプログラムデータベースファイルが欠落しているように見えます(基本的に、パスが変更されており、コンパイラで検出できなくなりました)。詳細については、 this 関連の投稿を参照してください。

1
dirkgently

ソリューションブラウザーでプロジェクトを右クリック=> Clean => Build。それは、ビルドが.pdbを生成する場合です(ターゲットディレクトリを調べます)。そうでない場合は、他の投稿に記載されている手順でデバッグを有効にする必要があります。

0
Yuri Feldman

同様の問題がありました。その理由は、ソリューションのプロジェクトの1つを別のプロセスで実行し、そのプロセスを強制終了できなかったためです。私はそれをあまり考えませんでした。そのため、別の環境でソリューションを構築しているときに、pdbファイルの1つが一致しなかったため、最後にpdbファイルをロードできませんでした。コンピューターを再起動したところ、修正されました。

幸運を

0
oliver

この問題は私を長い間悩ませてきました。 AnTのanwserは非常に役立ちます。主なアイデアは、同じディレクトリにない場合でも同じ名前の2つのpdbファイルがないことです。

これが私の状況です。「FooBar」と「FooBarDll」という名前のプロジェクトを2つ持っています。最初のプロジェクトはexe、2番目のプロジェクトはdllです。両方のプロジェクトターゲット名を「FooBar」に設定し、それぞれ「FooBar.exe」と「FooBar.dll」を生成します。

次に設定します

  1. 「一般->中間ディレクトリ」は「$(OutDir)\ $(ProjectName)\」になります
  2. 「C/C++->出力ファイル->プログラムデータベースファイル名」を「$(IntDir)$(TargetName).pdb」に
  3. 「リンカー->デバッグ->プログラムデータベースファイルの生成」を「$(OutDir)$(TargetName).pdb」に

だから私はこれらのファイルを取得します:

  1. Debug\FooBar.exe
  2. Debug\FooBar.pdb // C++ pdb
  3. Debug\FooBar\FooBar.pdb //リンカーpdb

  4. Debug\FooBar.dll

  5. Debug\FooBar.pdb // C++ pdb 再度!
  6. Debug\FooBarDll\FooBar.pdb //リンカーpdb

私の解決策は、すべての「TargetName」を「ProjectName」に置き換えることです。

  1. Debug\FooBar.exe
  2. Debug\FooBar.pdb // C++ pdb
  3. Debug\FooBar\FooBar.pdb //リンカーpdb

  4. Debug\FooBar.dll

  5. Debug\FooBarDll.pdb // C++ pdb
  6. Debug\FooBarDll\FooBarDll.pdb //リンカーpdb

その後、競合はありません!

「C/C++->出力ファイル->プログラムデータベースファイル名」が「$(IntDir)$(ProjectName)_C.pdb」になるように、C/C++ pdbに接尾辞を付けることができます。

0
WooodHead

ほとんどの場合、.pdb/.exeファイルの不一致、何かが構築/再構築されていないなどの他の理由がありますが、Visual Studio 2013でも同様のケースがありました-

仮想インライン機能と関係があるので、私は疑っています。

私の場合、デバッガは、呼び出されたものではなく、別のC++関数の途中でジャンプしていました。ジャンプはソースコードから11行離れていましたが、なぜ多くの誤算が発生したのか説明できません。単純な再配置機能により、この問題を取り除きました。

11行シフトが最初に発生した理由について、より詳細な分析が必要な場合があります。

他のビジュアルスタジオでは、このような動作を見たことはありません。

0
TarmoPikaro

私は同じ問題を抱えていましたが、VS IDEフォルダで "symsrv.no"を "symsrv.yes"に名前変更することで、この link が問題の解決に役立ちました。

0
Sean

Visual Studioを再起動すると、この問題の1つのインスタンスを修正できます。

0