如何在WinDbg中设置符号?

2023-11-27

我在用Windows 调试工具启动 WinDbg / cdb 或 ntsd 时收到以下错误消息:

Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path.           *
* Use .symfix to have the debugger choose a symbol path.                   *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************

执行任意命令时,我也会收到错误消息

*** ERROR: Module load completed but symbols could not be loaded for <module>.<ext>

以下似乎是相关的:

*********************************************************************
* Symbols can not be loaded because symbol path is not initialized. *
*                                                                   *
* The Symbol Path can be set by:                                    *
* using the _NT_SYMBOL_PATH environment variable.                   *
* using the -y <symbol_path> argument when starting the debugger.   *
* using .sympath and .sympath+                                      *
*********************************************************************

In a !analyze -v我也见过

DEFAULT_BUCKET_ID:  WRONG_SYMBOLS

and

*************************************************************************
***                                                                   ***
*** Either you specified an unqualified symbol, or your debugger      ***
*** doesn't have full symbol information. Unqualified symbol          ***
*** resolution is turned off by default. Please either specify a      ***
*** fully qualified symbol module!symbolname, or enable resolution    ***
*** of unqualified symbols by typing ".symopt- 100". Note that        ***
*** enabling unqualified symbol resolution with network symbol        ***
*** server shares in the symbol path may cause the debugger to        ***
*** appear to hang for long periods of time when an incorrect         ***
*** symbol name is typed or the network symbol server is down.        ***
***                                                                   ***
*** For some commands to work properly, your symbol path              ***
*** must point to .pdb files that have full type information.         ***
***                                                                   ***
*** Certain .pdb files (such as the public OS symbols) do not         ***
*** contain the required information. Contact the group that          ***
*** provided you with these symbols if you need this command to       ***
*** work.                                                             ***
***                                                                   ***
*************************************************************************

如何设置 WinDbg 来查找符号?

Disclaimer: This is intended to be a canonical question to all the wrong symbols posts in windbg.


可以通过各种不同的方式正确设置符号。

WARNING:这里的例子使用\\server\symbols这通常是不可用的网络存储。将其适应您的本地服务器,或者如果您没有本地服务器,则完全忽略该部分。不存在的服务器可能会导致延迟等。

适用于 80% 情况的 TLDR 版本

新建一个文件夹c:\symbols对于 Microsoft 提供的符号。然后输入

.symfix+ c:\symbols
.reload

(or reload -f如果需要的话)

确保您有 Internet 连接,因为这将联系一些 Microsoft 服务器并从那里下载符号。

在 80% 以上的情况下,这可能已经解决了您的符号问题。如果没有,请继续阅读。

通过命令修复符号

WinDbg 将按照符号在符号路径中出现的顺序查找符号。因此,最好先放置本地符号,然后是一些公司本地网络共享,然后从 Internet 下载符号并在本地存储副本。

.sympath c:\mysymbols ; *** Symbols of your application, locally, flat list of PDB files
.sympath+ cache*c:\symbolcache ; *** (optional) Create a cache for everything
.sympath+ \\server\symbols ; *** Symbols provided from a network share
.symfix+ c:\symbols ; *** Microsoft symbols

通过菜单修复符号

In WinDbg (but not the command line equivalents) you can set a symbol path by File/Symbol File Path... or pressing Ctrl+S. You enter it in the following format

c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

通过命令行修复符号

WinDbg 还采用-y如果您希望使用具有不同符号路径设置的不同桌面链接,请使用命令行开关。

WinDbg -y "<symbol path>"

请注意,此处需要完整路径,其形式如下

c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

通过环境变量修复符号

有一个环境变量叫_NT_SYMBOL_PATH也可以设置为符号路径。使用以下语法:

c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

请注意,不仅 WinDbg 会评估此变量,Visual Studio、Process Explorer、Process Monitor 和其他可能的软件也会评估此变量。设置此环境变量可能会影响性能。

将符号路径保存为工作空间的一部分

如果您有一个相当复杂的符​​号设置,其中包括多个路径,请熟悉WinDbg 工作区的概念.

工作区允许您保存符号路径,因此您不必在每个调试会话中重新键入所有命令。

对工作区感到满意后,为 WinDbg 创建一个链接以包含-Q这意味着“抑制烦人的“保存工作空间?”问题”。

到目前为止,我很高兴将符号保存为Base工作区。

延迟符号

延迟符号(在lm命令)不是问题。 WinDbg 将在需要时加载它们。要强制加载所有这些,请输入

ld*

调试符号问题

如果符号 (PDB) 未按预期工作,请使用

!sym noisy

获取有关 WinDbg 在解析符号时具体执行的操作的更多信息。

找到解决方案后,将其关闭

!sym quiet

要检查各个符号的正确性,您可以使用symchkWinDbg 自带的工具。

Symchk /if <exe> /s <symbol path> /av /od /pf
/if = input is a file
/s  = symbol file path
/od = all details
/av = verify
/pf = check if private symbols are available

or get ChkMatch哪个更容易使用

ChkMatch -c <exe file> <pdb file>

如果您在从网络共享访问符号时遇到问题,请确保您之前登录到网络共享。 AFAIR,WinDbg 不要求凭据。

官方文档

使用 Microsoft Symbol Server 获取调试符号文件(应该重定向到这里但重定向目前已损坏)

Windows 调试器的符号路径

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在WinDbg中设置符号? 的相关文章

  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • 检查应用程序是否从 Visual Studio 调试会话中启动

    我正在开发一个安装系统范围键盘的应用程序 钩 我不想在运行调试时安装这个钩子 从视觉工作室内部构建 否则它会挂起工作室 以及最终的系统 我可以通过检查是否 DEBUG 符号已定义 但是 当我调试时release应用程序的版本是 有一种方法可
  • 调试自定义 Kafka 连接器的简单有效的方法是什么?

    我正在使用几个 Kafka 连接器 在控制台输出中没有看到它们的创建 部署有任何错误 但是我没有得到我正在寻找的结果 没有任何结果 无论是期望的还是否则 我基于 Kafka 的示例 FileStream 连接器制作了这些连接器 因此我的调试
  • RMI 中的引用传递问题? [复制]

    这个问题在这里已经有答案了 有人可以告诉我我错在哪里 为什么这个 RMI 聊天应用程序不起作用 目标是通过远程对象或序列化对象实现客户端 服务器和逻辑之间的解耦 import javax swing import java awt even
  • 当变量取特定值时如何使 PyCharm 中断?

    我有一本大字典 其中一些元素偶尔会出现非法值 我想弄清楚非法值从何而来 PyCharm 应该不断监视我的字典的值 一旦它们中的任何一个取了非法值 它就应该中断并让我检查程序的状态 我知道我可以通过为我的字典创建一个 getter sette
  • 什么可以解释托管堆上超过 5,000,000 个 System.WeakReference 实例?

    我一直在针对生产 ASP NET Web 应用程序运行负载测试 并且看到在堆上创建了大量 System WeakReference 在大约 15 分钟内 负载管理堆内存已飙升至大约 3GB 并且我有大约 5 000 000 个对 Syste
  • MS Source Server - 使用 srctool 查看时源流显然不存在

    我一直在尝试安装 MS 调试工具中的 MS Source Server 内容 目前 我正在通过 Subversion 索引命令运行我的代码 pdbs 该命令现在按预期运行 它为给定的 pdb 文件创建流并将其写入 pdb 文件 但是 当我在
  • sed 错误“未终止的 's' 命令”故障排除

    我正在构建一个script https stackoverflow com questions 4036832 replacing a specific term in an xml file其中 它将用文件夹路径替换 XML 文件中的模式
  • 在远程 Glassfish 上进行日志记录和/或调试

    我有个问题 我在远程 Glassfish 实例上部署了一个 Web 服务 现在我需要一些简单的日志或调试系统来纠正我的代码 使用简单的打印会更好 我的想法是使用 glassfish 日志文件 因为我可以从管理 GUI 访问它 但它不起作用
  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get
  • StatET调试工具

    我想我只是很密集 但我似乎无法弄清楚如何在 Eclipse 中的 R 中使用调试工具 StatET 插件 有人有关于这个主题的任何提示或教程吗 StatET 2 00 现在对高级 可视化调试提供实验性支持 需要 Eclipse 3 6 或
  • 禁用 Eclipse Java 调试器的热代码替换 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Eclipse 中禁用热代码替换 https stackoverflow com questions 2594408 how do i disable hot code replace in
  • 调试VS 2005提示“操作不支持”

    我一直在调试 VS 2005 并将 启动外部程序 设置为 C Program Files Microsoft Visual Studio 10 0 Common7 IDE devenv exe 但按 F5 后出现此错误 尝试运行项目时出错
  • _CrtCheckMemory使用示例

    我试图了解如何使用 CrtCheckMemory追踪我正在开发的 Windows 应用程序中的堆损坏 我似乎无法让它返回false 这是我的测试代码 int test new int 1 for int i 0 i lt 100 i tes
  • Xcode 9 - 框架断点

    在 Xcode 7 和 8 中 我已经能够通过在也包含框架项目的 xcworkspace 中运行包含应用程序来调试我一直在开发的框架 如果我在框架中设置断点 它们就会在运行时被触发 在 Xcode 9 beta 6 中 情况不再如此 到目前
  • 如何为我的 Android Market APK 创建证书?

    我想将我的第一个 APK 应用程序上传到 Android Market 但我收到了此错误 顺便说一下 在 stackoverflow 中搜索时并没有引导我找到正确的链接 市场不接受使用调试证书签名的 APK 创建有效期至少 50 年的新证书
  • 如何在 Firefox 30 上调试 Greasemonkey 脚本?

    我一直在为 Youtube 开发一个 JavaScript 片段 它使用 Greasemonkey 并且还导入 Bootstrap 和 jQuery 库 该应用程序必须为每个搜索列表结果添加一个按钮 当用户单击该按钮时 它必须带出用户从其频
  • 每当刷新页面时,DevTools 都会自动切换到“Sources”选项卡

    每当我使用 DevTools 时 如果刷新网页 DevTools 就会切换到 源 选项卡并打开每个脚本 There s a feature called Focus Sources panel when triggering a break
  • Debug.WriteLine() 未命中

    我正在调试 Windows 服务 通过点击F5在 Visual Studio 2010 中 使用以下代码 In 程序 cs file static void Main if Environment UserInteractive We ar
  • Visual Studio 2010“找不到或打开 PDB 文件”

    我尝试在 Visual Studio 10 中调试程序 但遇到断点问题 我将与 dll 文件对应的 pdb 文件放在同一目录中 但是在检查模块时 我发现每个 DLL 文件都被签名为Cannot find or open the PDB fi

随机推荐

  • 重用 NSPredicate 进行新变量替换

    我可以重用 NSPredicate 来替换新变量吗 我的 NSPredicate 相当简单 NSPredicate userPredicate NSPredicate predicateWithFormat id userID userID
  • 如何将控制台应用程序窗口设置为最顶层窗口(C#)?

    如何将控制台应用程序设置为最顶层窗口 我正在 NET 中构建控制台应用程序 我正在使用 C 甚至可能 pinvokes 到非托管代码也可以 我认为我可以让我的控制台应用程序从 Form 类派生 class MyConsoleApp Form
  • 错误:无法从链接服务器“ADSI”的 OLE DB 提供程序“ADsDSOObject”获取行

    当我尝试查询 AD 中的用户时 收到以下错误 无法从链接服务器 ADSI 的 OLE DB 提供程序 ADsDSOObject 获取行 我认为该问题是由于 1000 行限制 或 Sql Server 2008 中的 901 行 造成的 我可
  • 从 strsplit - R 之后的嵌套列表中提取第 n 个元素

    我一直在尝试了解如何处理的输出strsplit好一些 我经常有这样的数据想要拆分 mydata lt c 144 4 5 154 2 146 3 5 142 143 4 DNB 90 1 144 4 5 154 2 146 3 5 142
  • 带return语句和不带return语句的函数有区别吗?

    假设您有 2 个相同的函数 但不返回值 function a do some interesting things function b do the same interesting things return 功能b显然更冗长 但是它们
  • 使用 jquery 或 javascript 更改 CSS 根变量

    我在网页中使用 CSS 变量并制作一种主题颜色 root themeColor 0afec0 hoverColor fff bodyColor EEF1EF 现在我已经用过var themeColor 到处 我想分配一个随机颜色 theme
  • 如何对使用 Angular 中的路由器的组件进行单元测试?

    在 Angular 2 0 0 中 我正在对使用 Router 的组件进行单元测试 但是我得到 提供的参数与调用目标的任何签名都不匹配 错误 在spec ts的Visual Studio代码中 新的Router 以红色突出显示 正确的语法是
  • 选择optgroup中的所有选项

    我有一个select已分组的元素options 我需要选择 或取消选择 全部options in an optgroup当option被点击 我还需要能够拥有多个optgroup立即被选择 我希望它的工作方式是这样的 如果未选择任何内容 我
  • 在 Container-VM 映像上使用 root 用户登录 docker

    这是关于 Google Container VM Image beta 的问题https cloud google com compute docs containers vm image 我登录了一个由Container VM镜像制作的实
  • 输入大小固定的算法复杂度

    我找到了一些关于大 O 表示法的参考资料 但据我所知 算法复杂性是输入数据大小的函数 例如 如果冒泡排序的复杂度为O n 2 n是输入数组的大小 正确的 但是 如何确定具有固定输入大小并取决于输入值的算法的复杂性 例如 求最大公约数 GCD
  • bookdown:自定义输出文件名

    这是我之前在这里提出的问题的后续 为 bookdown 项目创建随附幻灯片 Bookdown允许将文件编译为各种格式 包括多个pdf 因此 问题是给输出赋予不同的名称 如果没有 则第二个pdf编译覆盖第一个 在对我之前问题的评论中 我写道
  • Wakanda 服务器脚本化干净关闭

    通过 OS X shell 脚本执行 Wakanda 服务器彻底关闭的最佳实践是什么 这将是当前加载和运行的解决方案 即将发布的 1 1 0 版本的最佳实践 处理applicationWillStop事件在service处理应用程序特定的关
  • .NET:如何在不打开文件的情况下打印文件

    我们有一个主要用于归档文件的应用程序 并且我们为用户提供了打印这些文件的可能性 它们可以是 txt doc pdf jpg 没什么花哨的 有没有一种 NET 方法可以将这些文件发送到打印机而不需要进一步处理它们 即打开它们 我已经尝试使用
  • 带 SFTP 的 Paramiko SSH 客户端

    如何进行 SFTP 传输SSHClient在远程服务器上 我有一个本地主机和两个远程主机 远程主机是备份服务器和Web服务器 我需要在备份服务器上找到必要的备份文件 并通过 SFTP 将其放在 Web 服务器上 如何使 Paramiko 的
  • 如何在 Flutter 中获取、设置、更新和删除 Cloud Firestore 中的数据?

    我尝试了一些代码 但出现异常 我得到的异常 java lang IllegalArgumentException Invalid document reference Document references must have an eve
  • 如何避免 HTML5 Canvas 中的多边形边缘缝合伪影?

    我为 OpenHeatMap 开源项目维护并行 Flash 和 HTML5 Canvas 渲染器 我受到两个版本之间带有分数坐标的填充多边形渲染不一致的困扰 如果渲染共享一条边的两个多边形 Canvas 将沿该边显示可见的连接 而 Flas
  • ViewExpiredException:找不到已保存的视图状态:在 JSF 中提交表单时

    我在尝试提交表单时遇到以下异常 javax faces application ViewExpiredException page1 xhtml No saved view state could be found for the view
  • 在Ubuntu上的QT5中将透明的QWidget放在QMediaView之上

    Goal 我希望基于 QT5 的 GUI 的背景是正在播放的视频文件 我还希望能够以透明度设置 GUI 组件的样式 以便视频能够透过它们显示 我不确定这是否有可能实现 可能是我刚刚错过了一个重要的线索 我毕竟是 Qt 初学者 也可能是它根本
  • Node.js读取USB端口信号

    我已经安装了串行端口使用 npm 的 Node js 模块 npm install serialport 现在我想通过计算机的 USB 端口从 Android 手机向节点应用程序发送一些消息 假设节点可以读取串行端口信号 以前有人这样做过吗
  • 如何在WinDbg中设置符号?

    我在用Windows 调试工具启动 WinDbg cdb 或 ntsd 时收到以下错误消息 Symbol search path is Invalid Symbol loading may be unreliable without a s