我复制了一个现有项目并重命名了该文件夹。现在,当我尝试编译应用程序时,我收到此错误
debugging information cannot be found or does not match. No symbols loaded.
Do you want to continue debugging ?
如果我单击是,它会编译并运行正常。但现在我必须处理这个消息。只是好奇我在项目属性中改变了什么来让它停下来。
答案 0 :(得分:64)
您可能已停用项目的调试信息:
重建您的项目并重试,它现在应该在没有消息的情况下运行:)
答案 1 :(得分:29)
主要原因是你没有匹配的pdb和exe。
一些可能的解决方案:
答案 2 :(得分:10)
这种情况经常发生在我身上,在调试代码和进行更改时,似乎visual studio缓存了pdb信息,有时它会卡住。执行重建解决方案,删除pdb并创建新解决方案并不能解决问题。
当然,我确实有生成调试信息及其所需的全部内容,特别是因为在调试代码时会发生这种情况。
Visual Studio似乎对内存中的pdb感到满意,并拒绝更新它,无论时间戳或pdb中的大小更改如何。
重置此方法的唯一方法是退出Visual Studio(IDE)并重新启动它。
在极少数情况下,IDE可能仍在后台运行(进程资源管理器在那里显示)并且可能保持文件句柄处于打开状态。您可以在重新启动IDE之前终止该进程。
祝你好运
答案 3 :(得分:7)
我刚刚在VS2012中遇到此错误。它肯定是由Visual Studio中的一个错误引起的,当主项目的本地PDB文件与整个可执行文件的最终PDB文件同名时(即使这两个文件位于不同的目录中!
考虑这个例子。
解决方案包含三个项目:main
,a
和b
。 main
是可执行文件的顶级项目,而a
和b
是链接到main
的库。
在所有三个项目中$(IntDir)
变量都设置为$(SolutionDir)\$(Configuration)\$(ProjectName)\
。这意味着项目main
将其中间文件转储到Debug\main\
,将项目a
转储到Debug\a\
,依此类推。
在C/C++ -> Output Files
设置中,所有三个项目的Program Database File Name
值设置为$(IntDir)$(TargetName).pdb
。这意味着项目main
会将其本地PDB文件生成为Debug\main\main.pdb
,将b
生成为Debug\b\b.pdb
,依此类推。
最后,在项目Linker -> Debugging
的{{1}}设置中,main
值设置为Generate Program Database File
。这意味着整个可执行文件的全局PDB文件将生成为$(OutDir)$(TargetName).pdb
。
请注意,在此设置中,每个PDB文件都在其自己的单独目录中生成。
在此设置中,如果尝试在调试器下运行程序,则会出现无法找到调试信息或错误错误。如果您查看Debug\main.pdb
文件(将存在),您会注意到它与Debug\main.pdb
文件完全相同!即某种程度上,Debug\main\main.pdb
的本地PDB设法覆盖了应该是最终可执行文件的全局PDB。即调试者抱怨PDB文件错误"是正确的。这确实是错误的。
同样,在上面的设置中,最终的全局PDB以某种方式被顶级项目的本地PDB覆盖。我不知道为什么会这样。这似乎是一个错误。 (请注意,即使这些PDB文件具有相同的名称,它们也会在不同的目录中生成,即它们不应该冲突。)
解决此问题的解决方法是为项目main
的本地PDB指定一个不同的名称。例如,只需转到main
项目的C/C++ -> Output Files
,然后将main
值更改为Program Database File Name
(如果您愿意,则更改为$(IntDir)$(TargetName)_local.pdb
)。这将消除冲突并解决问题。
答案 4 :(得分:3)
通过以下方式启用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)
答案 5 :(得分:2)
我遇到了同样的问题并尝试了上述所有解决方案,但它无法帮助我。 然后我随机找到了一个新的解决方案,它起作用了。
解决方案是,如果您在解决方案中有许多项目,那么您应该将任何一个项目(您必须决定的项目)标记为“设置为启动项目”。 右键单击该特定项目,然后单击“设置为启动项目”。
它对我有用。
答案 6 :(得分:1)
pdb
或程序数据库文件似乎缺失(基本上,路径已更改,编译器无法再找到)。有关其他信息,请参阅this相关帖子。
答案 7 :(得分:0)
我遇到了类似的问题,原因是我在不同的流程中运行了我的解决方案中的一个项目,并且该流程无法被杀死。我没想太多。因此,当我在一个单独的环境中构建解决方案时,其中一个pdb文件不匹配,所以最后我无法加载任何pdb文件。我刚刚重新启动计算机并修复了它。
祝你好运答案 8 :(得分:0)
重新启动Visual Studio可以修复此问题的一个实例。
答案 9 :(得分:0)
在解决方案浏览器中右键单击您的项目=>清洁=>建立。 也就是说,如果您的构建生成一个.pdb(查看目标目录) 如果没有,您应该通过其他帖子中提到的步骤启用调试
答案 10 :(得分:0)
最有可能还有其他原因,例如.pdb / .exe文件不匹配,某些内容未构建/重建,但我在Visual Studio 2013中有类似的情况 -
与虚拟内联功能有关 - 所以我怀疑。
在我的情况下,调试器在另一个C ++函数的中间跳转,而不是被调用的函数。跳过11个源代码行的源代码,但我无法解释为什么会发生多少错误计算。通过简单的重新排列功能,我摆脱了这个问题。
可能需要更详细的分析为什么最初发生11次换班。
Haven在任何其他视觉工作室都没有看到过这种行为。
答案 11 :(得分:0)
这个问题困扰了我很长一段时间。 AnT的anwser非常有帮助。主要思想是没有任何两个pdb文件具有相同名称,即使它们不在同一目录中。
这是我的情况:我有两个项目名称“FooBar”和“FooBarDll”,第一个是exe,第二个是dll。我将两个项目目标名称设置为“FooBar”,以便它们分别生成“FooBar.exe”和“FooBar.dll”。
然后我设置
所以我得到这些文件:
Debug \ FooBar \ FooBar.pdb //链接器pdb
调试\ FooBar.dll
我的解决方案是用“ProjectName”替换每个“TargetName”,然后我会得到:
Debug \ FooBar \ FooBar.pdb //链接器pdb
调试\ FooBar.dll
然后没有冲突!
给C / C ++ pdb后缀可能更好,例如:“C / C ++ - >输出文件 - >程序数据库文件名”为“$(IntDir)$(ProjectName)_C.pdb”
答案 12 :(得分:0)
我有同样的问题,这个link帮我解决了这个问题,在VS IDE文件夹中将“symsrv.no”重命名为“symsrv.yes”。
答案 13 :(得分:-1)
好奇,我发现我需要更改文件夹名称:
...\Custom Librarry (MyDll.dll(
到
...\Custom Librarry (MyDll.dll)
只需关闭它有效的括号!