debugging信息无法find或与Visual Studio不匹配
我复制了一个现有的项目,并重命名文件夹。 现在,当我尝试编译应用程序时,出现此错误
debugging information cannot be found or does not match. No symbols loaded. Do you want to continue debugging ?
如果我点击是,它编译和运行良好。 但现在我必须处理这个信息。 只要好奇我在项目属性中更改以使其停止。
主要原因是你没有匹配的PDB和EXE。
可能的解决scheme
- 您正在编译而不是debugging版本
- 你需要清理/build立或重build
- 您没有在exe文件所在的目录中生成您的pdb文件
- 你有一个不匹配的PDB,也许复制的来源是比今天的date更新,并没有正确的build设。
- 尝试清除所有debugging对象文件
- 您附加到从build exe和pdb所在的不同位置开始的进程
- 重新启动Visual Studio
您可能已经停用了您的项目的debugging信息:
- 右键单击你的项目 – >属性
- configuration属性 – >链接器 – >debugging
- 将“生成debugging信息”从“否”切换到“是”
重build你的项目并重试,现在应该运行没有消息:)
这种情况发生在我身上,在debugging代码和进行更改时,似乎visual studio会cachingpdb信息,有时会卡住。 做一个重build解决scheme,删除pdb和创build一个新的不解决问题。
当然,我确实需要生成debugging信息以及所需的所有信息,特别是在debugging代码几次的时候。
Visual Studio似乎对内存中的pdb感到满意,并拒绝更新它,而不考虑pdb中的时间戳或更改大小。
重置此唯一方法是退出Visual Studio(IDE)并重新启动它。
在极less数情况下,IDE可能仍然在后台运行(进程资源pipe理器在那里显示它),并可能保持打开文件的句柄。 您可以在重新启动IDE之前终止进程。
祝你好运
我刚在VS2012遇到这个错误。 这绝对是由Visual Studio中的一个错误引起的,当主项目的本地PDB文件与整个可执行文件的最终PDB文件具有相同的名称时(即使这两个文件位于不同的目录中!
考虑这个例子。
解决scheme由三个项目组成: main
, a
和b
。 main
是可执行文件的顶层项目,而a
和b
是链接到main
库。
在所有三个项目中, $(IntDir)
variables被设置为$(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
settings of project main
, Generate Program Database File
值被设置为$(OutDir)$(TargetName).pdb
。 这意味着整个可执行文件的全局PDB文件将被生成为Debug\main.pdb
。
请注意,在此设置中,每个PDB文件都在其自己的独立目录中生成。
在此设置中,您将得到debugging信息找不到或不匹配错误,如果您尝试在debugging器下运行该程序。 如果您看一下Debug\main.pdb
文件(它将存在),您会注意到它与Debug\main\main.pdb
文件Debug\main\main.pdb
! 即不知何故本地PDB为main
覆盖什么应该是最终的可执行文件的全球PDB。 即debugging器是正确的抱怨PDB文件是“错误的”。 这确实是错的。
再次,在上面的设置中,最终的全局PDB以某种方式被顶层项目的本地PDB覆盖。 我不知道为什么会发生。 这似乎是一个错误。 (请注意,尽pipe这些PDB文件具有相同的名称,但它们是在不同的目录中生成的,即它们不应该发生冲突。)
解决此问题的解决方法是为项目main
的本地PDB提供一个不同的名称。 例如,只要进入C/C++ -> Output Files
main
项目和更改Program Database File Name
值$(IntDir)$(TargetName)_local.pdb
(或$(IntDir)12345.pdb
如果你想)。 这将消除冲突并解决问题。
我面临同样的问题,并尝试所有上述解决scheme,但它不能帮助我。 然后,我随机发现了一个新的解决scheme,它工作。
解决的办法是,如果你在一个解决scheme中有很多项目,那么你应该把任何一个(你必须决定的项目)标记为“设置为启动项目”。 右键单击该特定项目,然后单击“设置为启动项目”。
它为我工作。
该pdb
或程序数据库文件似乎丢失(基本上,path已经改变,不能再被编译器find)。 看到这个相关的职位了解更多信息。
我有一个类似的问题,原因是我在不同的过程中运行了我的解决scheme中的一个项目,并且这个过程不能被杀死。 我没有想太多。 所以当我在一个单独的环境中构build解决scheme时,其中一个pdb文件不匹配,所以最后我无法加载任何pdb文件。 我刚刚重新启动我的电脑,并修复它。
祝你好运
重新启动Visual Studio可以修复此问题的一个实例。
在解决scheme浏览器中右键单击您的项目=> Clean => Build。 也就是说,如果你的版本生成了一个.pdb(看你的目标目录)如果没有,你应该启用其他post中提到的步骤debugging
最有可能还有其他原因,如.pdb / .exe文件不匹配,一些没有build立/重build,但我有类似的情况下在Visual Studio 2013 –
与虚拟内联函数有关 – 所以我怀疑。
在我的情况下,debugging器跳到了另一个C ++函数的中间,而不是被调用的函数。 跳转是源代码11源代码行,但我不能解释为什么很多错误发生。 通过简单的重新排列function,我摆脱了这个问题。
本来可能需要更详细的分析为什么发生了11行转移。
在其他任何视觉工作室中都没有见过这种行为。
这个问题困扰了我很长一段时间。 AnT的anwser是非常有帮助的。 主要思想是没有任何两个pdb文件具有相同的名称 ,即使它们不在同一个目录中。
这是我的情况:我有两个项目名称“FooBar”和“FooBarDll”,第一个是exe,第二个是dll。 我将两个项目Target Name设置为“FooBar”,以便它们分别生成“FooBar.exe”和“FooBar.dll”。
然后我设定
- “General – > Intermediate Directory”为“$(OutDir)\ $(ProjectName)\”
- “C / C ++ – >输出文件 – >程序数据库文件名”为“$(IntDir)$(TargetName).pdb”
- “链接器 – >debugging – >生成程序数据库文件”为“$(OutDir)$(TargetName).pdb”
所以我得到这些文件:
- debugging\ FooBar.exe
- Debug \ FooBar.pdb // C ++ pdb
-
Debug \ FooBar \ FooBar.pdb // Linker pdb
-
debugging\ FooBar.dll
- Debug \ FooBar.pdb // C ++ pdb !
- debugging\ FooBarDll \ FooBar.pdb //链接器pdb
我的解决scheme是用“ProjectName”replace每个“TargetName”,然后我会得到:
- debugging\ FooBar.exe
- Debug \ FooBar.pdb // C ++ pdb
-
Debug \ FooBar \ FooBar.pdb // Linker pdb
-
debugging\ FooBar.dll
- Debug \ FooBarDll.pdb // C ++ pdb
- debugging\ FooBarDll \ FooBarDll.pdb //链接器pdb
那就没有冲突了!
给C / C ++ pdb一个后缀可能会更好,如:“C / C ++ – >输出文件 – >程序数据库文件名”为“$(IntDir)$(ProjectName)_C.pdb”
我有同样的问题,这个链接帮助我解决了这个问题,在VS IDE文件夹中将“symsrv.no”重命名为“symsrv.yes”。
启用PDB创build:
右键单击MyProject > Properties > Debugging
:
-
C/C++ > General > Debug Information Output = Program Database (/Zi)
-
Linker > Debugging > Generate Debug Info = Yes (/DEBUG)
清理MyProject,重新启动Visual Studio(只是肯定),重buildMyProject。 输出文件夹应包含* .pdb文件。
如果您debugging优化/发布代码考虑通过closures优化
-
C++ > Optimization > Optmization = Disabled (/Od)
好奇的是,我碰巧需要更改文件夹名称:
...\Custom Librarry (MyDll.dll(
至
...\Custom Librarry (MyDll.dll)
只是通过closures它的工作!