`
insertyou
  • 浏览: 916787 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

如何使用WinDBG跟踪调试ASL/ACPI?

阅读更多

如何使用WinDBG跟踪调试ASL/ACPI?

去年在研究ACPI的时候我有用windbg来分析一下ACPI methods,当时配置windbg的时候参考了几位前辈的文章,今天也转其中一篇过来以做备份。原地址是:http://blog.csdn.net/EFIBIOS/archive/2007/03/12/1526763.aspx

在现代计算机中,硬件和固件(BIOS)都必须符合ACPI规范,以便操作系统可以控制所有模块的自动配置和电源管理。 使用WinDbg调试ACPI代码通常需要两台计算机,一台是目标机(Debuggee),另一台作为主机(Debugger)。下面就介绍一下怎么在两台机器上建立调试环境。
1、配置调试Debuggee的连接方式
Windbg支持COM、1394、USB2.0三种不同的连接方式,看到网上有些文章关于使用USB2.0来连接,需要购买特殊的USB调试线,而且价格不菲,本篇文章就不讨论了。笔记本电脑一般都没有COM端口,只好使用1394或是COM转USB,但在这里我只想讨论怎么使用COM端口来连接。

启动到操作系统,使用bootcfg命令或直接使用文本编辑器修改boot.ini文件,指定调试使用的端口及参数。为了使用COM端口来调试,需要在启动参数中加入/debug参数,并指定/debugport和/baudrate子参数来作为启动项。下面这个boot.ini文件的第一个启动项就是配置使用COM端口。/debugport子参数指出使用Debuggee的哪个COM口,/baudrate指出连接的速度(默认是每秒19200位)。

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Debugging with Cable" /fastdetect /debug /debugport=COM1 /baudrate=57600
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect

下面的例子使用bootcfg命令设置第一个启动项使用COM1端口、波特率为115200。bootcfg的/debug开关打开,/port开关及/baud参数指出端口和速度,/ID开关指出修改的是第一个启动项。

bootcfg /debug ON /port COM1 /baud 115200 /ID 1

2、建立AML调试环境
AML调试器被包含在checked版(调试版)的acpi.sys中,为了完全使用AML调试器,这个驱动必须要安装在目标机上。尽管Free版(正式版)的acpi.sys支持一部分的AMLI debugger扩展命令,但它并没有包含AMLI debugger。

如果你的目标机上已经安装Windows的checked版,运行的就是checked版的acpi.sys。如果安装的是free版的Windows,你可以选择重新安装一个完整的checked版或选择只安装checked版的acpi.sys。(肯定是后一种方式方便啊J),我会在另外一篇文章中讲讲怎么在free版的Windows中安装checked版的acpi.sys。

3、下载安装Windbg
Windbg在微软网站上有免费下载,http://www.microsoft.com/whdc/devtools/debugging/default.mspx,现在的版本是6.6.7.5。安装它没有什么特别之处,如果你曾经在别的机器上安装过,直接拷贝到你现在的机器上也能用。看到某些帖子说最好安装路径上不要有空格,可能会出问题,但我一直没碰到过。

4、主机端符号(Symbol)文件路径配置
首先,什么是symbol文件呢?Symbol文件包含了很多调试DLL、EXE文件的时候需要的数据,但它们在程序运行的时候没什么用。通俗的说,Symbol File是包含了相关二进制文件(EXE,DLL)调试信息的一种文件,它以.pdb为扩展名。比如Windows XP下有一个GDI32.dll,那么微软在编译该DLL的时候会产生一个GDI32.pdb文件,程序员有了这个PDB文件,愿意的话就可以用它来调试,跟踪到GDI32.dll的内部去!一般来说,symbol文件包含一下内容:

a.全局变量(Global variables)
b.局部变量(Local variables)
c.函数名和它们的入口地址(Function names and the addresses of their entry points)
d.FPO data(frame pointer omission),frame pointer是一种用来在调用堆栈(Call stack)中找到下一个将要被调用的函数的数据结构源代码的行序号(Source-line numbers)

该文件和二进制文件的编译版本密切相关,比如你修改了DLL的输出函数等,再编译该DLL那么原先的PDB文件就过时了,不能再胜任调试的重担了,这时候你需要的是修改后编译产生的PDB文件。所以,主机端使用的Symbol文件一定要和目标机上安装的操作系统的版本要一致。

Symbol文件对于Windbg来说是至关重要的,如果找不到正确的Symbol文件,调试功能就没法使用。Windows的Symbol文件可以在微软网站上免费下载,http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx。可我不建议您这么做,因为不管是Checked版的还是Free版的Symbol都有近200M,下载过程相当痛苦。好在微软提供了Symbol服务器,使得Windbg可以自己在上面查找需要的模块。具体配置方法是:File-〉Symbol File Path…弹出符号文件对话框,输入: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols,“C:\Symbols”可以是本地人一路径,用来保存下载的符号文件。

5、联机开始调试
A、启动目标机,当启动到启动菜单的时候,移动方向键,结束倒数计时,使它停在这个地方。

B、在主机上打开Windbg,File-〉kernel Debug,选择相应的连接方式,如果使用COM端口的话,在对话框中填写主机使用的COM端口以及所选择的波特率,波特率需要和目标机上的设置相同。

点击OK就大功告成了,尝试使用!amli debugger命令启动AMLI调试器,如果没什么动静,这就算成功了。开始调试你的ACPI代码吧

分享到:
评论

相关推荐

    用windbg调试uefi在hyper-v全套资源

    Set-VMComPort -VMName dbguefiisov2 -Path \\.\pipe\windbg -Number 1 修改 C:\Program Files (x86)\Intel\Intel(R) UEFI Development Kit Debugger Tool\SoftDebugger.ini [Debug Port] Channel = Pipe Port = ...

    使用Windbg双机调试驱动

    "使用Windbg双机调试驱动" Windbg是微软出品的一款双机调试软件,用于调试Windows内核程序。双机调试的主要思想是使用虚拟机和主机来进行调试,虚拟机上安装要调试的操作系统,而主机上安装Windbg。 调试前的准备 ...

    使用WinDbg内核调试

    特别对于驱动开发者使用的WinDbg和KD这两个内核调试器(CDB和NTSD是用户态调试器)。本教程的目标是给予一个已经有其他调试工具使用经验的开发者足够信息,使其能通过参考WINDOWS调试工具的帮助文件进行内核调试。...

    使用windbg调试dmp文件

    使用windbg调试windows crash 产生的dmp文件

    Windbg中文调试手册

    - 新用户可以参考“使用Windows调试入门”来开始使用Windbg,而调试内核模式驱动程序的初学者可以尝试“调试通用驱动程序 - ‘逐步操作’实验室(Echo内核模式)”。 **相关工具** - Windows调试工具还包括一系列...

    WinDubug SOP/ACPI Debug

    9. 暂停调试和保存ACPI Log:在调试过程中,需要暂停调试,然后在WinDbg软件的底部命令行中输入指令来重新加载符号文件,开启ASL码的详细输出,并开始调试。在ACPI调试过程中,代码会在WinDbg的底部BUSY栏中不断刷新...

    windbg工具和windbg内核调试指南

    用户可以通过安装此版本的Windbg,结合《WinDbg 内核调试指南》的学习,深入掌握Windbg的使用和内核调试技术。 总之,Windbg是系统级调试的利器,对于开发者和IT运维人员来说,掌握其使用技巧能够极大地提高问题...

    使用WinDbg和虚拟机调试Windows驱动程序.pdf

    文档《使用WinDbg和虚拟机调试Windows驱动程序.pdf》主要介绍了利用WinDbg调试工具以及虚拟机技术来调试Windows驱动程序的实践过程。文档强调了调试驱动程序时的安全性和便利性,尤其是在物理机器上直接调试可能会...

    WinDbg与vmware虚拟机调试配置 解决WinDbg与vmware不能连接问题

    此外,还可以进一步扩展,例如添加符号表来提高调试效率(参考链接[1]),或了解更多关于WinDbg命令的使用方法(参考链接[2])。 总之,通过这些步骤,开发人员可以更加高效地进行系统或驱动程序的调试工作,提高...

    驱动开发入门-之二:Win7x64 - WinDbg 双机调试环境搭建

    综上所述,本文为读者详细讲解了如何在Windows 7 x64环境下搭建使用WinDbg进行驱动程序双机调试的开发环境,包括调试环境的必要性、调试工具WinDbg的介绍、双机调试环境的搭建方法,以及相关预装组件和工具的配置。...

    WinDbg 调试程序崩溃操作详解

    本文将深入探讨如何使用WinDbg进行程序崩溃的调试,并提供针对C++和.NET平台的调试策略。 一、WinDbg基础 WinDbg提供了命令行和图形界面两种模式,以适应不同用户的需求。它的主要功能包括: 1. **断点设置**:...

    使用windbg进行双机内核调试

    本文将深入探讨如何使用Windbg进行双机内核调试,这对于系统开发者、驱动程序员以及故障排查人员来说,是极其重要的技能。 首先,我们需要理解双机调试的背景。在单机调试中,调试器和被调试的目标系统通常运行在...

    windbg双机调试配置

    通过以上步骤,我们已经完成了使用Windbg进行双机调试的基本配置。双机调试是一项非常实用的技术,特别是在处理复杂的系统级问题时。通过正确配置测试机和开发机,我们可以更高效地定位问题所在,提高软件质量。希望...

    WinDbg内核调试.pdf

    - **丰富的调试命令**:除了基础的断点和变量查看功能外,WinDbg还提供了大量高级命令,如内存分析、调用栈跟踪等。 - **多平台支持**:WinDbg支持x86、x64和Itanium等多种处理器架构,适应更广泛的开发需求。 ####...

    windbg高级调试教程

    《Windbg高级调试教程》是针对.NET应用的深入调试指南,涵盖了从基本概念到高级技巧的广泛内容。在这个教程中,我们将深入探索Windbg这款强大的调试工具,以及如何结合dump文件进行高效的故障排查。 首先,Windbg是...

    Windows调试工具入门4 - WinDbg内核调试配置

    在深入探讨Windows调试工具入门第四部分,特别是关于WinDbg内核调试配置的主题之前,首先我们...通过阅读《Windows调试工具入门4 - WinDbg内核调试配置》这样的资源,可以帮助初学者快速上手并逐步精通WinDbg的使用。

    Windows 11 版本 WDK中windbg调试插件

    然而,对于更复杂的调试任务,如分析内存泄漏或跟踪系统调用,开发者往往还需要借助Windbg的力量。这个插件可能是为了弥合这两者之间的鸿沟,提供一个无缝的开发和调试流程。 使用这个插件时,开发者可以期待以下...

    winDBG 的调试符号配置

    3. **使用`.sympath`命令**:在WinDbg调试会话中也可以动态地修改符号路径。例如,可以使用`.sympath`命令: ```windbg .sympath SRV*d:\localsymbols*http://msdl.microsoft.com/download/symbols ``` 上述命令...

Global site tag (gtag.js) - Google Analytics