windebug常用命令
### WinDbg常用命令详解 WinDbg是Windows操作系统下的一个功能强大的调试工具,它可以用于内核模式和用户模式下的调试。本文将详细介绍WinDbg中的常用命令及其用途。 #### 1. 加载符号(Symbol Loading) - **命令格式**: ```plaintext .reload /f [sym_path] ``` - **描述**: 此命令用于重新加载调试器的符号表,通常在调试过程中符号文件发生变化或需要更新时使用。 - **参数说明**: - `/f`:强制重新加载所有模块的符号。 - `[sym_path]`:指定符号文件的路径。如果省略,则使用默认设置。 #### 2. 断点设置(Breakpoint Commands) - **命令格式**: ```plaintext bp [expression] bm [expression] ba [expression] bl [expression] bd [expression] be [expression] ``` - **描述**: 这些命令用于在代码中设置、显示、删除断点。 - **参数说明**: - `bp`:在指定地址处设置断点。 - `bm`:在指定内存位置设置断点。 - `ba`:设置条件断点。 - `bl`:列出所有已设置的断点。 - `bd`:删除断点。 - `be`:启用或禁用断点。 - **示例**: ```plaintext bp sufilter.c:143 ".if (poi(MyVar)>5) {echo MyVar Too Big}.else {echo MyVar Acceptable; gc}" ``` 在`sufilter.c`文件的第143行设置一个条件断点,当`MyVar`的值大于5时,输出"MyVar Too Big";否则输出"MyVar Acceptable",然后清除断点。 #### 3. 内存操作(Memory Operations) - **命令格式**: ```plaintext ln ``` - **描述**: `ln`命令用于查看当前指令指针(IP)周围的一段指令流,通常用于了解程序的执行流程。 #### 4. 模块信息(Module Information) - **命令格式**: ```plaintext x [module] ``` - **描述**: `x`命令用于查看指定模块的信息,包括其导出函数等。 - **参数说明**: - `[module]`:指定要查看的模块名称或地址。 - **子命令**: - `x *`:显示所有模块的简要信息。 - `x module!`:显示指定模块的所有导出函数。 - `x module!function`:显示指定模块中特定函数的详细信息。 #### 5. 分析堆栈(Stack Analysis) - **命令格式**: ```plaintext !analyze -v ``` - **描述**: 此命令用于自动分析导致崩溃的原因,并提供可能的解决方案。 - **参数说明**: - `-v`:增加输出的详细程度。 #### 6. 崩溃转储(Crash Dump) - **命令格式**: ```plaintext .crash dump [filename] ``` - **描述**: 当程序崩溃时,可以使用这些命令创建转储文件。 - **参数说明**: - `.crash`:创建一个崩溃转储文件。 - `dump filename`:创建一个指定文件名的转储文件。 - **子命令**: - `.dump /f`:创建完整的转储文件。 - `.dump /mini`:创建最小化转储文件。 #### 7. 重启调试器(Restart the Debugger) - **命令格式**: ```plaintext .reboot ``` - **描述**: 使用此命令可以重启调试会话,常用于调试过程中出现错误需要重新开始时。 #### 8. 启动WinDbg(Starting WinDbg) - **命令格式**: ```plaintext "C:\Program Files\Debugging Tools for Windows (x86)\windbg.exe" -b -v -i <path_to_symbols> -y <path_to_sources> ``` - **描述**: 该命令用于启动WinDbg调试器,并指定符号文件和源文件的路径。 - **参数说明**: - `-b`:后台运行。 - `-v`:详细输出。 - `-i <path_to_symbols>`:指定符号文件路径。 - `-y <path_to_sources>`:指定源文件路径。 通过以上介绍,我们可以看到WinDbg提供了丰富的命令来帮助开发者进行高效的调试工作。熟练掌握这些命令能够极大地提高调试效率并减少问题定位的时间。希望本篇介绍能够为正在使用WinDbg进行调试工作的读者们提供一定的帮助。
1 关于源代码下不了断点, 有可能有如下原因:
源代码不是最新的, 源代码的版本与符号文件的版本不一致.
注意, 经常用.reload来重新加载Symbol文件. 这是用windbg很容易犯的一个错误, 莫名奇妙的不知道怎么搞的, 就发现不对劲了.
源代码的某段被宏注释后, 可能下不了断点.
2 下断点: bp, bm, ba, bl, bd, be
bp 普通下断点, 可以下在符号上, 也可下在地址上
bm 可以一次下很多断点, 支持通配符匹配, 例如, bm ga*, 能够下在所有ga开头的函数上.
ba 下在内存上, 当需要检视某块内存的读写或者执行时, 用这个命令. 格式一般如下: ba r4 8504160c, 从8504160c的内存, 当有读时, break
bl和bd, be就不用说了
br 从新分配断点id br 13 8
// 下条件断点. article_name: Setting a Conditional Breakpoint
bp `sufilter.c:143` ".if (poi(MyVar)>5) {.echo MyVar Too Big} .else {.echo MyVar Acceptable; gc} "
3 ln
查看某个地址附近的情况, 例如, 需要了解某段地址附近有哪些代码, 可用这个命令.
4 x
查看module在内存中的地址.
x *! 查看所有模块在内存中的地址范围
x sufilter! 查看sufilter所有的代码符号(全局变量, 函数)的加载地址
x sufilter!sufilterreadwritemt
5 !analyze -v
- 千华2012-04-26不错,虽然不太全,不过都是实用的
- xiamiking2012-06-15还行,比较常用的都有了,但是不是太全
- xhf2006bj2012-12-05还可以,比较实用
- losemymind2016-02-15还是蛮好用的
- 粉丝: 1
- 资源: 16
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助