【发布时间】:2011-09-12 17:15:18
【问题描述】:
当我通过windbg -k 在目标上传送ntsd -d 时,我无法在windbg 中显示源代码,但是当我在本地调试时它可以工作。
我想调试 Winlogon.exe 和 LSASS.exe 的第一个代码执行。但为了便于重现问题,我做了这样的设置:
- 我使用 CrashMe sample application,预构建源代码和符号,复制到目标和主机上的 C:\CrashMe
- 我在任何地方都使用适用于 Windows (DTW) 版本 6.12.0002.633 的 Windows 调试工具。
- 目标是运行 Windows XP SP3,宿主 Windows 7 Ultimate。
- 两台机器上的每个路径和设置都是相同的:DTW 路径和 crashme 路径。
- 我总是使用完全限定路径(如 c:\dtw\ntsd.exe)。
- 我在 VM 中运行 XP,使用
/noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200启动
我可以使用从 C:\CrashMe: 启动的这个命令在本地进行调试:
windbg -g -G -srcpath C:\CrashMe -y C:\CrashMe debug\CrashMe.exe
我可以启动 Windows XP 虚拟机并使用以下命令连接到它:
windbg -n -k com:pipe,port=\\.\pipe\com_1,reconnect -srcpath SRV*;C:\CrashMe -y
c:\windows\system32;c:\windows\symbols;C:\CrashMe\debug
但我需要调试远程机器。在目标上,我有以下选择:
- 通过
-server和-remote进行调试 - 中断正在运行的进程
- 使用图像文件执行选项 (IFEO)。
在每个选项中,我都可以看到符号(x crashme!* 有效)。
我无法使用#1 (-server) 或#2 (breakin.exe <pid>),因为我要调试身份验证提供程序的启动代码,所以我需要在ntsd -d 下启动LSASS.exe。我不能让它运行并稍后附加。
我的理解是我需要使用 IFEO。使用 gflags.exe 而不是手动修改注册表,我将可执行选项设置为
c:\dtw\ntsd -d -G -lines -x -y c:\symcache;c:\windows\system32 -n -srcpath C:\CrashMe\
- 我可以中断应用程序,但我设置的断点永远不会命中。
- 我可以
.open任何文件,但我不能使用该文件设置断点。 - 我可以 x(检查)任何符号
- 我看不到源代码。
如何查看在ntsd -d 到windbg -k 下运行的进程的DLL 源代码?
【问题讨论】:
-
我还没有找到答案,但这可能与 ntsd 不是图形调试器有关?
-
在相关说明中,在完全相同的设置下,我可以在 windbg 中使用完整的源代码调试内核驱动程序。
-
如果您可以调试驱动程序,那么您已经有一个连接,该连接也可以用于调试用户模式代码(即您的应用程序)。
-
你是对的,我确实使用它。但我无法获得显示的来源!
-
司机也不行?在这种情况下,您没有正确配置 a.) 源服务器,b.) 驱动程序未在运行调试器的机器上编译(因此路径不同)或 c.) 您的 WinDbg 配置不正确(然后启动 WinDbg
Ctrl+P配置源路径或-srcpath <path>在命令行)。
标签: dll windbg remote-debugging