既存のプロジェクトをコピーし、フォルダーの名前を変更しました。アプリケーションをコンパイルしようとすると、このエラーが発生します
デバッグ情報が見つからないか、一致しません。シンボルがロードされていません。
デバッグを続行しますか?
[はい]をクリックすると、コンパイルして正常に実行されます。しかし今、私はそのメッセージに対処しなければなりません。私がプロジェクトのプロパティで何を変更して停止するかについて興味があります。
主な理由は、一致するpdbとexeがないことです。
可能な解決策:
あなたはおそらくあなたのプロジェクトのデバッグ情報を無効にしているでしょう:
プロジェクトを再構築して再試行すると、メッセージなしで実行されるはずです:)
これは時々起こりますが、コードをデバッグして変更を加えているときに、Visual Studioがpdb情報をキャッシュしているように見えます。再構築ソリューションを実行し、pdbを削除して新しいものを作成しても、問題は解決しません。
もちろん、デバッグ情報を生成し、必要なものはすべて持っています。これは、特にコードを数回デバッグしているときに発生するためです。
Visual Studioは、メモリ内のpdbに満足しているようで、タイムスタンプやpdbのサイズの変更に関係なく、更新を拒否します。
これをリセットする唯一の方法は、Visual Studio(IDE)を終了し、再起動することです。
まれに、IDEがバックグラウンドで実行されている可能性があり(プロセスエクスプローラーはそこに表示されます)、ファイルのハンドルを開いたままにします。IDEを再起動する前にプロセスを強制終了できます。
幸運を
VS2012でこのエラーが発生しました。これは間違いなくVisual Studioのバグが原因であり、メインプロジェクトのローカルPDBファイルが実行可能ファイル全体の最終PDBファイルと同じ名前である場合に明らかになります(2つが異なるディレクトリにある場合でも!)
この例を考えてみましょう。
ソリューションは、main
、a
、およびb
の3つのプロジェクトで構成されています。 main
は実行可能ファイルの最上位プロジェクトであり、a
とb
はmain
にリンクされたライブラリです。
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
に変更します。 )。これにより、競合が解消され、問題が解決します。
次の方法で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)
私は同じ問題に直面し、上記のすべての解決策を試しましたが、それは私を助けることができませんでした。その後、新しいソリューションをランダムに見つけて、うまくいきました。
解決策は、ソリューションに多数のプロジェクトがある場合は、いずれかのプロジェクト(決定する必要がある特定のプロジェクト)を「スタートアッププロジェクトとして設定」としてマークすることです。その特定のプロジェクトを右クリックし、「スタートアッププロジェクトとして設定」をクリックします。
それは私のために働いた。
pdb
またはプログラムデータベースファイルが欠落しているように見えます(基本的に、パスが変更されており、コンパイラで検出できなくなりました)。詳細については、 this 関連の投稿を参照してください。
ソリューションブラウザーでプロジェクトを右クリック=> Clean => Build。それは、ビルドが.pdbを生成する場合です(ターゲットディレクトリを調べます)。そうでない場合は、他の投稿に記載されている手順でデバッグを有効にする必要があります。
同様の問題がありました。その理由は、ソリューションのプロジェクトの1つを別のプロセスで実行し、そのプロセスを強制終了できなかったためです。私はそれをあまり考えませんでした。そのため、別の環境でソリューションを構築しているときに、pdbファイルの1つが一致しなかったため、最後にpdbファイルをロードできませんでした。コンピューターを再起動したところ、修正されました。
幸運を
この問題は私を長い間悩ませてきました。 AnTのanwserは非常に役立ちます。主なアイデアは、同じディレクトリにない場合でも同じ名前の2つのpdbファイルがないことです。
これが私の状況です。「FooBar」と「FooBarDll」という名前のプロジェクトを2つ持っています。最初のプロジェクトはexe、2番目のプロジェクトはdllです。両方のプロジェクトターゲット名を「FooBar」に設定し、それぞれ「FooBar.exe」と「FooBar.dll」を生成します。
次に設定します
だから私はこれらのファイルを取得します:
Debug\FooBar\FooBar.pdb //リンカーpdb
Debug\FooBar.dll
私の解決策は、すべての「TargetName」を「ProjectName」に置き換えることです。
Debug\FooBar\FooBar.pdb //リンカーpdb
Debug\FooBar.dll
その後、競合はありません!
「C/C++->出力ファイル->プログラムデータベースファイル名」が「$(IntDir)$(ProjectName)_C.pdb」になるように、C/C++ pdbに接尾辞を付けることができます。
ほとんどの場合、.pdb/.exeファイルの不一致、何かが構築/再構築されていないなどの他の理由がありますが、Visual Studio 2013でも同様のケースがありました-
仮想インライン機能と関係があるので、私は疑っています。
私の場合、デバッガは、呼び出されたものではなく、別のC++関数の途中でジャンプしていました。ジャンプはソースコードから11行離れていましたが、なぜ多くの誤算が発生したのか説明できません。単純な再配置機能により、この問題を取り除きました。
11行シフトが最初に発生した理由について、より詳細な分析が必要な場合があります。
他のビジュアルスタジオでは、このような動作を見たことはありません。
私は同じ問題を抱えていましたが、VS IDEフォルダで "symsrv.no"を "symsrv.yes"に名前変更することで、この link が問題の解決に役立ちました。
Visual Studioを再起動すると、この問題の1つのインスタンスを修正できます。