2011-08-30 99 views
0

刚开始步我的内核模式USB驱动程序,它是在汇编程序。如何将WinDbg配置为c级调试?这就是我现在的样子=/WinDbg c级调试?

MyDriver!MyDriver_EvtDeviceAdd+0xb: 
af20801b 833d647020af03 cmp  dword ptr [MyDriver!DebugLevel (af207064)],3 
0: kd> p 
MyDriver!MyDriver_EvtDeviceAdd+0x2e: 
af20803e ff15006020af call dword ptr [MyDriver!_imp__KeGetCurrentIrql (af206000)] 
0: kd> p 
MyDriver!MyDriver_EvtDeviceAdd+0x58: 
af208068 8d95a8feffff lea  edx,[ebp-158h] 
0: kd> p 
MyDriver!MyDriver_EvtDeviceAdd+0x64: 
af208074 c785bcfeffff508420af mov dword ptr [ebp-144h],offset MyDriver!MyDriver_EvtDevicePrepareHardware (af208450) 

回答

0

你需要确保你生成您的驱动程序“CODEVIEW” /调试符号,生成的文件是WinDBG的访问。

+0

我使用WDK自己的编译器和连接器的Windows Vista x86的“检查建造”,“建设-ceZ”我要补充任何额外的到。我的Windows Vista是一个“免费构建”是一个问题? – user872661

2

WinDbg无法找到pdb文件。正确填写所有WinDbg的路径:

  1. 符号搜索路径 - 必须包括司机.pdb文件和MS调试符号本地路径。

  2. 源搜索路径 - 必须包含具有驱动程序源文件的目录。

  3. 图像文件路径 - 必须包含驱动程序.sys文件。

查看WinDbg日志:它报告尝试加载调试信息的所有错误。如果您看到类似“无法加载your_driver.sys的调试信息”,则说明有问题。

+0

我很确定1和2是好的。但是我必须看到更接近3.明天。我在通过Firewire连接到我的开发人员计算机的目标计算机上运行驱动程序。在目标计算机上,我只有.sys文件(以及安装信息和一些WDK KMDF协同安装程序的DLL)。开发人员的计算机有完整的源代码,生成的符号ets ...)这是一个正确的方法吗? – user872661

+0

@ user872661 - 目标计算机只能包含运行时:.sys,.inf。调试器计算机必须包含.pdb,符号,源代码和可执行文件。加载驱动程序时,打开其中一个源文件并尝试设置断点。 WindDbg询问您是否加载调试符号。选择“是”。这是加载调试符号时的地方,请查看WinDbg日志 - 它会打印所有加载的驱动程序。 –

+0

好吧,由于我能够在断点上断开,我猜符号文件没问题。仍然只有汇编代码,而步进= / – user872661

1

根据上面的输出,您的符号看起来很好。如果您没有弹出源窗口,通常会出现以下两种情况之一:

1)您已将原始源代码从原来的位置移开。默认情况下,PDB具有到原始源代码位置的完全限定路径。如果你移动它,WinDBG将无法找到它。你可以看到WinDbg用作做寻找:

üMyDriver MyDriver_EvtDeviceAdd

这应该给你包含嵌入PDB该函数的源模块的完整路径。您可以通过将源搜索路径设置为指向新位置来覆盖此路径。

2)你已经设法隐藏源窗口莫名其妙。看起来很愚蠢,但发生在我的学生身上:)检查WinDBG中的“Window”菜单项,看看该窗口是否在某处打开。

要澄清一个较早的观点,你做而不是在这种情况下需要设置你的图像文件路径。唯一需要的时间是如果您正在调试微型转储。

斯科特