为什么Visual Studio 2010无法找到/打开PDB文件?


83

我正在尝试在VS 2010中使用OpenCV。我是一个业余爱好者,我正在从OpenCV Wiki学习入门。但是,当尝试调试我的项目时,出现以下错误:

'C:\ Windows \ SysWOW64 \ ntdll.dll',找不到或打开PDB文件'C:\ Windows \ SysWOW64 \ kernel32.dll',找不到或打开PDB文件'C:\ Windows \ SysWOW64 \ kernellbase。 dll”,无法找到或打开PDB文件

我将这些文件放在正确的目录中,为什么它不能打开它们?我应该怎么做才能解决这个问题?


“在正确的目录中”是什么意思?PDB与DLL位于同一文件夹中吗?
哈珀

1
@harper:考虑到有问题的库的Windows系统文件,PDBS很可能不应该是在同一文件夹中的DLL。DLL位于C:\ Windows \ SysWOW64目录中,但PDB符号很可能位于您设计的符号缓存目录中。您在Visual Studio调试选项中指定的一个。
科迪·格雷

@Cody Gray:是否可以将PDB复制(手动)到目录中,还是需要使用Microsoft(源)符号服务器?
哈珀

@harper:我不知道它是否可以那样工作。我不知道如果Visual Studio将找到PDB符号出现(虽然我想象它)。但是,就许可而言,我很确定您必须使用MS的符号服务器。您还将如何获取PDB文件?我也不确定你为什么要抵制这个。Visual Studio内置了所有这些功能,那么为什么不利用它呢?它旨在在本地缓存符号,因此您不必每次都重新下载它们。我什至没有注意到它的发生了。
科迪·格雷

@库迪·格雷:我不想抵制任何东西。我什至没有这些PDB。但是我很好奇它是如何工作的。
哈珀

Answers:


124

首先更改以下参数:

工具->选项->调试->符号->服务器->是

然后按Ctrl+ F5,您将看到令人惊奇的事情。


2
哇!这太棒了!感谢您的回答。为您+1!
马修·克鲁斯

请注意,这只会下载一次符号吗?它根本不会阻止我离线工作吗?
Seanny123

1
您知道直接下载链接吗?我正在一个无法访问互联网的封闭网络中工作。
levkaster 2015年

2
Euhm ...控件F5不附加调试器AFAIK。因此,这个答案遗漏了重点。
棘手的

1
我跟你说的一样 但是现在它显示了一些符号已加载,而其他pdb文件的其余部分未添加
Hemant Parihar

20

我很确定这些是警告,而不是错误。您的项目应该仍然可以正常运行。

但是,由于您应该始终尝试修复编译器警告,因此让我们看看可以发现什么。我对OpenCV一点都不熟悉,并且您没有链接到您正在关注的Wiki教程。但是在我看来,问题在于您正在运行64位版本的Windows(如DLL文件路径中的“ SysWOW64”文件夹所证明的),但是您尝试的OpenCV是内置的适用于32位平台。所以,你可能需要重建使用C进行的项目,如解释在这里

更具体地说,列出的文件是Windows系统文件。PDB文件包含调试信息,Visual Studio使用该调试信息可以进入和调试已编译的代码。您实际上并不需要系统库的PDB文件就能调试您自己的代码。但是,如果您愿意,也可以下载系统库的符号。转到“调试”菜单,单击“选项和设置”,然后向下滚动右侧的列表框,直到看到“启用源服务器支持”。确保选中该选项。然后,在左侧的树视图中,单击“符号”,并确保已选择“ Microsoft符号服务器”选项。单击“确定”关闭对话框,然后尝试重新构建。


7
我真的不确定我该说些什么。您在寻找更多帮助吗?还是您只是发表评论?因为如果您正在寻找更多的帮助,那么您将不得不解释“尝试此操作”时到底出了什么问题以及“没有用”的含义。我们都是程序员,您知道这不是归档有用的错误报告的方式。
科迪·格雷

抱歉,由于某些原因,我的整个邮件都没有粘贴。但是从那以后,我使用以下方法修复了它。stackoverflow.com/questions/1468726/...
daveomcd

10

Visual Studio社区版2015

整天都出现此错误。我最终通过转到工具>导入和导出设置>重置所有选项>重置常规设置来修复它。

重置后,转到工具>选项>调试>符号>-然后选中Microsoft符号服务器旁边的框。

在调试模式下运行您的应用程序,它将打开一个窗口,显示正在下载一堆不同的.dll文件的Symbols。让它完成此操作。

一旦完成,它应该再次工作。


3

我有同样的问题。事实证明,在编译从别人那里得到的项目时,我没有设置正确的StartUp项目(在解决方案资源管理器中右键单击所需的启动项目,然后选择“设置为StartUp项目”)。也许会有所帮助,加油。


1

谈到第一个线程/另一种可能性,当您的可执行文件在后台运行时,VS无法打开或找到进程的pdb文件。我当时与mpiexec合作,遇到了这个问题。始终检查您的任务管理器,并杀死将在项目中构建的任何执行过程。一旦这样做,它就会调试或正常运行。

此外,如果尝试继续警告,则不会命中断点,并且断点将没有当前可执行文件


1

对于像我一样在这里找到自己的VS2013用户:

Tools -> Options -> Debugging -> Symbols

您会看到该Cache symbols in this directory:字段为空;您可以自己浏览/输入路径,也可以直接单击Load all symbols按钮。将出现一个警告窗口,显示“由于尚未选择符号缓存目录,因此将使用默认目录”。现在C:\Users\XXXX\AppData\Local\Temp\SymbolCache,您将在以前为空的路径字段中看到。Load all symbols第二次单击,您将被设置。单击确定,只是为了勤奋工作,请清理并重建您的解决方案。


0

我发现这些错误有时是由于编译项目时权限不足所致-因此,我以管理员身份运行以使其正常运行。


0

我也有同样的警告。我不确定这是32位还是64位的问题。刚刚加载了新符号并解决了一些问题,但有关OpenCV的问题仍然存在。这是已解决问题与未解决问题的输出摘要:

'OpenCV_helloworld.exe':已加载'C:\ OpenCV2.2 \ bin \ opencv_imgproc220d.dll',找不到或打开PDB文件

'OpenCV_helloworld.exe':已加载'C:\ WINDOWS \ system32 \ imm32.dll',已加载符号(去除了源信息)。

如果有人询问,该代码将退出0。

程序“ [4424] OpenCV_helloworld.exe:本机”已退出,代码为0(0x0)。


0

我有同样的问题。调试不适用于OpenCV可执行文件随附的内容。您必须构建自己的二进制文件。
然后在Debug-> options and settings-> debug-> symbols中启用Microsoft Symbol Servers


0

我遇到了同样的问题。在C ++代码上运行单元测试时,出现错误消息“无法找到或打开PDB文件”。

日志

当我在Visual Studio中查看输出日志时,我看到它在错误的文件夹中查找。我已经重命名了WinUnit文件夹,但是WinUnit代码中的某些内容正在使用旧的文件夹名称查找PDB文件。我猜他们是硬编码的。

发现问题

当我第一次下载并解压缩WinUnit文件时,主文件夹称为“ WinUnit-1.2.0909.1”。解压缩文件后,我将文件夹重命名为“ WinUnit”,因为在Visual Studio项目安装过程中键入起来更容易。但这显然破坏了查找PDB文件的能力,即使我根据WinUnit文档进行了所有设置。

我的修复

我将文件夹名称改回了原来的名称,并且可以正常工作。

奇怪的。


0

这里有相同的问题,但有不同的解决方案。

首先,我尝试了以下方法,但没有一个起作用:

  1. 加载seanlitow建议的符号

  2. 删除/添加对PresentationFramework和PresentationCore的引用

  3. 重启系统

解决方案是撤消对代码所做的最后几处更改。我刚刚为检查和未检查的事件添加了两个单选按钮和事件处理程序。删除我最近的更改后,所有内容都会编译。然后,我又添加了确切的更改,并且一切都正确编译了。我不明白为什么这行得通-我唯一能想到的就是我的VS解决方案有问题。无论如何,如果其他建议均无效,则可以尝试还原最近的更改。注意:如果您关闭并重新打开Visual Studio,您的撤消历史记录将丢失。.因此您可以在关闭VS之前尝试此操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.