错误信息:无法找到或打开PDB文件

69

我尝试运行官方网站NVIDIA提供的示例程序,大多数程序都很顺利,只有几个出现了类似的错误信息。我该如何修复呢?这是我在运行名为“MatrixMul”的程序后得到的一个错误信息示例。

注意:我已经在我的Window7x64操作系统上安装了x32和x64NVIDIA CUDA Toolkit v5.0。

'matrixMul.exe': Loaded 'C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\bin\win32\Debug\matrixMul.exe', Symbols loaded.
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Program Files (x86)\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\cudart32_50_35.dll', Binary was not built with debug information.
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\apphelp.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\AppPatch\AcLayers.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\sspicli.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\msvcrt.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\rpcrt4.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\cryptbase.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\sechost.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\user32.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\gdi32.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\lpk.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\usp10.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\advapi32.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\shell32.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\shlwapi.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\ole32.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\oleaut32.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\userenv.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\profapi.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\winspool.drv', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\mpr.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\imm32.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\msctf.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\nvinit.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\nvcuda.dll', Binary was not built with debug information.
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\setupapi.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\cfgmgr32.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\devobj.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\dwmapi.dll', Cannot find or open the PDB file
'matrixMul.exe': Unloaded 'C:\Windows\SysWOW64\dwmapi.dll'
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\nvapi.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\version.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\wintrust.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\crypt32.dll', Cannot find or open the PDB file
'matrixMul.exe': Loaded 'C:\Windows\SysWOW64\msasn1.dll', Cannot find or open the PDB file
The thread 'Win32 Thread' (0x12fc) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x18a0) has exited with code 0 (0x0).
The program '[3104] matrixMul.exe: Native' has exited with code 0 (0x0)

请再确认一下,所有带有这些信息的样本都能正常运行,是吗?如果不能,那么你可能存在其他错误,而无法加载PDB文件只是一个干扰项。 - alrikai
不,所有这样的示例都没有正确运行。我对CUDA编程并不了解,因为我是初学者。 - KNU
这些示例的命令行输出是什么?这些消息都不是致命错误,那么当您运行它们时,这些示例输出了什么?可执行文件最后一条退出代码为0的消息看起来是正确的。 - alrikai
可能是重复的问题:在Visual Studio C++ 2010中找不到或打开PDB文件 - Snowman
重建项目已修复我的问题。 - Codebeat
6个回答

118
PDB文件是Visual Studio特定的文件,其中包含项目的调试符号。您可以忽略这些消息,除非您希望使用调试器步入那些dll的代码(这是可疑的,因为那些都是系统dll)。换句话说,您可以并且应该忽略它们,因为您不会拥有任何这些dll的PDB文件(默认情况下至少如此,事实证明,当通过Microsoft Symbol Server进行调试时,您实际上可以获得它们)。所有这意味着的是,当您设置断点并逐步执行代码时,您将无法进入任何这些dll中(您也不想这样做)。
仅出于完整性考虑,以下是来自MSDN的官方PDB描述:
程序数据库(PDB)文件保存调试和项目状态信息,允许增量链接程序的调试配置。当您使用/ZI或/Zi编译C/C++程序时,将创建PDB文件。
此外,供日后参考,如果您想为自己的代码创建PDB文件,则必须启用/ZI或/Zi选项构建项目(您可以通过项目属性-->C/C++-->常规设置它们,然后设置“调试信息格式”字段)。虽然与您的情况无关,但我认为这可能在未来有用。

1
“你将无法进入任何这些dll文件中(无论如何你也不想这样做)。” 等等... 为什么不能呢?如果我们想更好地了解某些东西的工作原理怎么办? - Andrew
9
@Andrew 这条评论更多地针对这个问题的具体细节——理解Windows系统DLL与运行CUDA示例应用程序是不相关的。 - alrikai
尽管我已经按照你的步骤操作,但仍然出现一个错误:'FaceReg.exe' (Win32): Loaded 'C:\Windows\System32\kernel32.dll'. Symbols loaded. 'FaceReg.exe' (Win32): Loaded 'C:\Windows\System32\KernelBase.dll'. Symbols loaded. 'FaceReg.exe' (Win32): Loaded 'C:\OpenCV\opencv\build\x86\vc12\bin\opencv_core2411d.dll'. Cannot find or open the PDB file. 'FaceReg.exe' (Win32): Loaded 'C:\Windows\System32\msvcp120d.dll'. Symbols loaded. - Dennis Do
@DennisDo,这更像是无法加载OpenCV PDB文件,而不是Windows PDB文件。 - alrikai
@DennisDo,我也遇到了同样的问题“opencv_world300d.dll”,无法找到或打开PDB文件。您是如何解决这个问题的? - user3751794
如果二进制分发未提供pdb文件,则可能需要从源代码构建opencv。 - drescherjm

36
与VS 2013一起工作。尝试以下操作: 工具 -> 选项 -> 调试 -> 输出窗口 -> 模块加载消息 -> 关闭 它会禁用模块加载的显示。

16
不知道为什么人们会给这样的回答投反对票;也许它并没有完全回答问题,但是它提供了有用的信息。顺便说一句,在输出窗口的文本区域上,您也可以右键单击。 - Andrew
1
@Mike22LFC 这会解决加载符号的问题吗? - user3751794

20

如果您收到此消息并感到困扰,需要使用管理员权限运行Visual Studio,以便在Visual Studio上应用此方向。

工具->选项->调试->符号,选择“Microsoft符号服务器”中的复选框,标记“加载所有模块”,然后单击“加载所有符号”。

其他所有的事情都将由Visual Studio为您完成,您将在输出窗口的调试下看到此消息:“Native已退出,代码为0(0x0)”。


2
我按照你说的做了,但是我现在无法点击“加载所有符号”,因为它已被禁用。应该在浏览器选项中显示缓存此目录中的符号。我不知道该选择什么。我正在使用Visual Studio 2015。 - Hemant Parihar

6
  1. 请检查项目属性 > 配置属性 > 链接器 > 调试选项卡下的“生成调试信息”设置是否为“是”。如果不是,请尝试将其更改为“是”。

  2. 这些特定的pdb文件(如ntdll.dll,mscoree.dll,kernel32.dll等)是用于Windows API的,简单应用程序不需要使用它们。但是,如果您找不到自己编译项目的pdb文件,则建议确保“项目属性 > 配置属性 > 调试 > 工作目录”使用“项目属性 > 配置属性 > 常规 > 输出目录”的值。

  3. 您需要以“管理员身份运行”Visual C++。右键单击可执行文件,然后单击“以管理员身份运行”


3

我也是CUDA/Visual Studio的新手,遇到了几个示例相同的问题。如果你运行DEBUG->开始调试,然后重复步进(F10),你会看到输出窗口出现并被填充。正常执行将返回正常完成状态0x0(如你所观察到的),并且输出窗口会关闭。


这对我来说是最有用的,因为我真的想看到这个程序的输出结果,以知道测试是否通过。请注意,实际上需要设置断点才能在窗口关闭之前停止执行。我在主方法的第一行设置了一个断点。 - Nick Graham

-1
如果在 Visual Studio 中出现此问题,请清理您的项目并重新运行。
生成 --> 清理解决方案
运行(或 F5)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接