【发布时间】:2014-09-29 13:15:32
【问题描述】:
我正在尝试在 WinDbg 中加载 dll 并收到此错误。这里是细节。
使用 VisualC++ express 构建 A.dll。
将 A.pdb 和 A.dll 放在 d:\test\ 目录中。
-
设置图片路径和符号路径为d:\test
.sympath gives OK D:\test -
尝试使用以下命令加载
.reload /f A.dll它给了
"A.dll" was not found in the image list. Debugger will attempt to load "A.dll" at given base 00000000. Please provide the full image name, including the extension (i.e. kernel32.dll) for more reliable results.Base address and size overrides can be given as .reload <image.ext>=<base>,<size>. DBGENG: wined3dwddm.dll - Partial symbol image load missing image info DBGHELP: No header for wined3dwddm.dll. Searching for dbg file DBGHELP: d:\test\A.dbg - file not found DBGHELP: d:\test\dll\A.dbg - path not found DBGHELP: d:\test\symbols\dll\A.dbg - path not found DBGHELP: .\A.dbg - file not found DBGHELP: .\dll\A.dbg - path not found DBGHELP: .\symbols\dll\A.dbg - path not found DBGHELP: A.dll missing debug info. Searching for pdb anyway DBGHELP: wined3dwddm - private symbols & lines d:\test\A.pdb - unmatched Unable to add module at 00000000
在最后一行“d:\test\A.pdb - unmatched”中,虽然它这么说,但我确信 pdb 文件是来自生成已安装 dll 的构建结果的文件。
其他问题
由于答案表明 A.dll 可能未加载,这里有一个可能的反例。为此,我需要稍微修改一下问题以反映我遇到的现实。
我有一组从开源项目构建的 dll(比如 A 到 Z dll)。老实说,我对整个项目的全貌不是很了解,我想用 WinDbg 通过跟踪函数来解决这个问题。
此外,当我在进程资源管理器中找到 A.dll 时,它就在那里。 而且,如果我尝试加载 A.dll 的符号,我会收到上述消息。有什么我想念的吗?
为什么我认为 A.dll 已加载
我在 A.dll 中打印了一条 uniqe 消息,例如 ("this_is_uniqe_message_from_A.dll"),我可以看到该消息正在连续打印。
我可以在进程资源管理器中看到 A.dll,链接到资源管理器进程。
另外,(我不确定这是否重要),我在 QEMU 版本 1.7.0 上使用 Windows 8.1。
此问题的原因及解决方法
原因:原因其实很简单。我要调试的进程在用户空间,当我尝试列出加载的模块时,我处于内核模式。
解决方案:我需要进入用户空间(进入我要调试的进程),然后,我可以看到模块列表。另外,我可以设置断点等。
我在 MSDN 论坛上发布了同样的问题,他们回答了我。见
【问题讨论】:
-
通过您的编辑,请提供有关您告诉我们的内容的证据。
lm中的模块名称可能与 DLL 的名称不同。请提供lmf的输出作为A.dll 确实加载到进程中的证据。 -
首先,lmf没有在列表中显示A.dll。我添加了我相信 A.dll 已加载的原因。请看一看。
-
您能否提供该情况的转储或是否包含敏感数据?如果没有,能否提供源代码(SSCCE),以便我们重现问题?
标签: c++ windows visual-c++ dll windbg