我已将Windbg设置为我的开发系统的调试器。而且,果然如果我在我的某些程序中引入一个陷阱弹出对话框;我点击调试按钮;并显示源文件,并突出显示错误行。鼠标悬停和本地vars窗口工作。
今天,我编写了一个相当简单的独立C应用程序,犯了一个错误并陷入了陷阱。但这次打击调试没有来源;只是控制台窗口。
如果我在main上设置断点并点击f5,确实会出现源代码,但鼠标悬停变量不起作用,也不会出现局部变量窗口。
程序编译为debug / Zi / Od,.pdb(& .ilk?)就在源和可执行文件旁边。
如果我手动调用windbg下的可执行文件,同样的事情。在运行到其中的断点之前没有源。然后没有本地的var知识。
如果它可以找到一个应用程序的适当信息;为什么不是另一个?
干杯,Buk。
答案 0 :(得分:0)
Windbg不知道PDB的位置,即使它们与exe在同一个文件夹中也是如此。在File
- > Symbol File Path
下添加PDB的位置( CTRL + S )。
答案 1 :(得分:0)
如果符号(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>
(评论中的一个问题)
不要担心工作空间和WinDbg要求保存。没有reading about it,你就无法理解这个概念。