【问题标题】:Windbg local symbols not found未找到 Windbg 本地符号
【发布时间】:2015-02-05 13:44:59
【问题描述】:

我已将 Windbg 设置为我的开发系统的调试器。而且,果然,如果我在某些程序中引发陷阱,则会弹出对话框;我点击调试按钮;并显示源文件,并突出显示故障行。鼠标悬停和本地变量窗口工作。

今天,我写了一个相当简单的独立 C 应用程序,犯了一个错误,中了一个陷阱。但是这次点击调试没有源;只是控制台窗口。

如果我在 main 上设置断点并按 f5,果然会出现源代码,但是鼠标悬停的变量和局部变量窗口都不起作用。

该程序是为调试而编译的 /Zi /Od 和 .pdb (& .ilk?) 就在源代码和可执行文件旁边。

如果我手动调用windbg 下的可执行文件,同样的事情。没有源,直到运行到其中的断点。然后没有本地 var 知识。

如果它可以找到一个应用程序的适当信息;为什么不是另一个?

干杯,Buk。

【问题讨论】:

  • pdb 是否与 dll 和/或可执行文件位于同一文件夹中? .sympath 显示什么?如果 pdb 与 dll 或执行文件夹不在同一位置,则它将无法完全解析您的符号,在这种情况下,请使用 .sympath + 'path_to_symbols' 或通过 GUI 'File->Symbol File 添加它们路径...'(或'ctrl'+S)并浏览到文件夹位置并添加,然后您应该勾选'reload'按钮或发出命令.reload
  • 正如我所说:“.pdb (& .ilk?) 就在源代码和可执行文件旁边。”。
  • .sympath 显示什么
  • ILK 仅用于链接器。您可以忽略甚至删除它们。开启!sym noisy 调试符号文件问题。
  • 嗯。感谢 !sym 嘈杂的命令。非常有帮助。看来我的安装在某种程度上被破坏了,因为它忘记了它应该记住的东西。例如。如果我手动将 sympath 设置为 .;事情似乎只需要几个步骤;但是如果我跑到断点;它突然忘记了一切,包括同情。同上,无论我更改设置多少次或选中“不再询问”,它总是要求保存工作区。我会尝试卸载/重新安装,也许是不同的版本。

标签: windbg


【解决方案1】:

Windbg 不知道 PDB 的位置,即使它们与 exe 位于同一文件夹中。在File->Symbol File Path (CTRL+S) 下添加 PDB 的位置。

【讨论】:

  • 这不可能,因为当它通过 WER 对话框调用时,它可以很好地找到位于同一位置的 .pdb 和源文件。至少对于其他程序。
【解决方案2】:

调试符号问题

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

!sym noisy

命令来调试问题。这将显示有关 WinDbg 查找 PDB 文件的路径的附加信息。

如果您更改符号路径来解决问题(使用.sympath.sympath+.symfix.symfix+),请务必在之后发出.reload

检查符号的正确性

如果更改符号路径仍然没有帮助,则可能是 PDB 与可执行文件不匹配(如果您只是编译它,则不应发生)。可以肯定的是,您可以使用 WinDbg 附带的symchk 工具。

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

或获取ChkMatch,它更容易使用

ChkMatch -c <exe file> <pdb file>

工作区

(cmets中的一个问题)

不用担心工作区和 WinDbg 要求保存的问题。没有reading about it,你就无法理解这个概念。

【讨论】:

  • 我确实读过它。除了'他们对我没有用;那么为什么我必须先了解它们,然后才能弄清楚如何忽略它们呢?你不想知道我对他们的真实想法。
  • @user3404756:如果你想忽略它们,你可以用-Q命令行参数启动WinDbg。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多