gpt4 book ai didi

debugging - Windows 调试符号 - 未加载

转载 作者:行者123 更新时间:2023-12-02 22:58:42 24 4
gpt4 key购买 nike

我使用的是 Windows 7 x64 SP1。我已经从以下位置下载了符号:

http://msdn.microsoft.com/en-us/windows/hardware/gg463028

我已下载并安装了 Windows 7 x64 SP1 的 x64 RTM 和 x64 SP1 符号。安装在 T:\Symbols 文件夹中。

但是当我调试 64 位 native C++ 应用程序时,符号根本不会加载。例如,对于 ntdll.dll,PDB 位于:

  • T:\Symbols\ntdll.pdb\6192BFDB9F04442995FFCB0BE95172E12
  • T:\Symbols\ntdll.pdb\CFF40300FD804691B73E12CF2A150EE02

但是 Visual Studio (2008/2010) 不会加载符号。调试时,从模块 View 中,我选择 ntdll.dll 并说 从 -> 符号路径加载符号,指定 ntdll.pdb。对于这两条提到的路径,它总是会说:

A matching symbol file was not found in this folder.

我还在调试->选项中添加了这个文件夹(T:\Symbols),但它仍然不会加载符号。调试时,加载所有符号按钮将被启用,单击也不会加载符号!

对于 32 位,PDB 文件名将为 wntdll.pdb(对于 ntdll.dll),并且将以上述方式存储在以 GUID 命名的文件夹中。但 VS 也不会加载用于 32 位调试的符号。

非常有趣(也令人沮丧)的是,当我选择从 -> Microsoft Symbols Server 加载符号时,它将完美下载并加载符号。它将在以下位置下载符号(ntdll 的完整路径):

enter image description here

\Users\...\AppData\Local\Temp\SymbolCache\ntdll.pdb\6192BFDB9F04442995FFCB0BE95172E12

在这里你可以看到GUID与T:\Symbols路径中以GUID命名的文件夹匹配,但是对于手动安装的符号,VS是刚性的不加载它!

对于NTDLL.PDB,尽管各自的文件夹相同,并且PDB的大小也相同,但时间戳可能不同。

有时 VS 也会将符号放置在:

C:\...\AppData\Local\Temp\SymbolCache\MicrosoftPublicSymbols

如果 VS 仅从 Microsoft 符号服务器下载正确的符号,那么本地下载的符号有什么用?

我的问题基本上是如何加载本地下载和安装的符号?

最佳答案

RTM 或 SP1 符号的下载链接几乎毫无用处。每个补丁日之后,您将获得更改的 ntdll.dll 或其他中央操作系统库。这将使您的“旧”pdb 无用。因此,您需要从符号服务器下载它们,以确保您是最新的。

但由于并非所有 dll 都已更改,因此您应该将符号服务器下载缓存设置到解包下载符号的同一位置。

前往:

工具-选项-调试-符号

并设置该目录中缓存符号的路径。

加载所有符号意味着您确实加载当前进程中加载​​的所有模块的所有符号。但它不会下载 Windows 使用的所有 dll 的所有符号。如果您下载了 Windbg,您将获得一个名为 symchk.exe 的工具,它允许您递归下载所有二进制文件的符号。

关于debugging - Windows 调试符号 - 未加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7136823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com