我正在Visual Studio Community 2013下开发C ++。它是C ++ / Win32项目而不是UWP,它作为Debug / x64平台运行。
我的配置是:
Tools -> Options -> Debugging -> Symbols -> All module, unless excluded
Tools -> Options -> Debugging -> Symbols -> Cache symbol in this directory
缓存符号目录包含大量*.pdb
个文件,但从未触及过。
问题:
当我偶尔运行调试器时,我收到有关联系MS符号服务器以下载ntdll.dll
和其他一些我认为系统相关的文件的消息,因为我不认为它们是我项目的一部分。
为什么要下载ntdll.dll
? This文章说:
未加载符号的一些常见原因包括:
- 符号路径未指向正确的位置
- 符号文件来自与进程中加载的模块不同的模块版本 - Visual Studio要求符号文件来自与模块完全相同的构建。即使源代码相同,它也无法加载来自不同构建的符号
醇>
我没有重建ntdll.dll
,我怎么能这样?这是不可能的,因为它是Windows内核的一部分,那么为什么要一次又一次地下载ntdll.dll
的调试符号而不是缓存呢?
修改
当我运行调试(F5),然后在Debug -> Windows -> Output
下我看到以下行:
'MyProject.exe' (Win32): Loaded 'C:\Windows\System32\ntdll.dll'. Loading disabled by Include/Exclude setting.
Debug -> Windows -> Modules
的输出:
ntdll.dll C:\Windows\System32\ntdll.dll N/A No Loading disabled by Include/Exclude setting. 2 10.0.14393.447 (rs1_release_inmarket.161102-0100) 11/2/2016 11:13 AM 00007FFFDF410000-00007FFFDF5E1000 [12772] MyProject.exe
正如我所说,它偶尔发生,所以我不知道我究竟能够如何重现这一点。似乎在过去的时间它正在运行,ntdll.dll
不再从MS服务器下载。我无法将x64更改为x86,因为我们的项目不能在x86上运行。
我的C:\Users\wakatana\AppData\Local\Temp\SymbolCache
包含以下文件夹/文件(我猜一个可能用于x86,另一个用于x64,但我不确定):
ntdll.pdb\41C94DD545BD4FCBA2E8F404185B97DC1\ntdll.pdb
ntdll.pdb\77A5329C3B1E425FAA9519DA285D8DA71\ntdll.pdb
是否可以明确告诉VS在ntdll.dll
中使用已经缓存的C:\Users\wakatana\AppData\Local\Temp\SymbolCache
版本用于所有新项目或默认的VS行为是什么?
我的操作系统是带有最新更新的Windows10 Home
答案 0 :(得分:0)
这与这个特定的集会有关。
如果我使用X86 Target,我将获得wntdll.pdb文件。
如果我使用X64目标,我将获得ntdll.pdb文件,但与您的一样,它们都在temp \ SymbolCache文件夹中。我还获取了信息"源信息剥离消息"在X64目标中。它在TOOLS-> Options-> Debugging-> Symbols下的默认符号文件夹中确实没有pdb文件。
由于我遇到了与您相同的问题,因此我向产品团队提交了一份连接报告:
您也可以添加评论并投票。