参考官网文档:
Wine Developer's Guide/Debugging Wine - WineHQ Wiki
一、综合
abort | 中止调试器 |
quit | 退出调试器 |
attach N | 附加到进程(N是其ID、数字或十六进制(0xN))。可以使用info process命令获取ID。请注意,info process命令返回十六进制值。 |
detach | 退出进程. |
help | 显示帮助文档 |
help info | 显示帮助文档 |
二、流程控制
cont, c | 继续执行,直到出现下一个断点或异常。 |
pass | 将异常事件向上传递到过滤器。 |
step, s | 继续执行,直到代码的下一行“C”(进入函数调用) |
next, n | 继续执行,直到代码的下一行“C”(不进入函数调用) |
stepi, si | 执行下一个程序集指令(进入函数调用) |
nexti, ni | 执行下一个程序集指令(不进入函数调用) |
finish, f | 执行直到退出当前函数 |
cont、step、next、stepi、nexti可以用数字(N)后缀,这意味着命令执行N次。
三、断点/观察点
enable N | 启用(中断|监视)点N |
disable N | 禁用(中断|监视)点N |
delete N | 删除(中断|监视)点N |
cond N | 删除(中断|监视)点N的任何现有条件 |
cond N expr | 将条件expr添加到(中断|监视)点N。每次遇到断点时,都会评估expr。如果结果为零值,则不会触发断点。 |
break * N | 在地址N处添加断点 |
break id | 在符号id的地址处添加断点 |
break id N | 在符号id内的第N行添加断点 |
break N | 在当前源文件的第N行添加断点 |
break | 在当前$PC地址添加断点 |
watch * N | 在地址N(4字节)添加一个监视命令(写入时) |
watch id | 在符号id的地址添加一个监视命令(写入时) |
info break | 列出所有(中断|监视)点(带状态) |
您可以使用符号EntryPoint来表示DLL的入口点。
当通过id设置断点/观察点时,如果找不到符号(例如,符号包含在尚未加载的模块中),winedbg将调用符号的名称,并在每次加载新模块时尝试设置断点(直到成功为止)。
四、堆栈
bt | 打印当前线程的调用堆栈 |
bt N | 打印ID为N的线程的调用堆栈(注意:这不会改变up和dn命令操作的当前帧的位置) |
up | 在当前线程的堆栈中向上一帧 |
up N | 在当前线程的堆栈中向上N帧 |
dn | 在当前线程的堆栈中向下一帧 |
dn N | 在当前线程的堆栈中向下N帧 |
frame N | 将N设置为当前线程堆栈的当前帧 |
info local | 打印当前函数框架的局部变量信息 |
五、目录和源文件操作
show dir | 打印查找源文件的目录列表 |
dir pathname | 将路径名添加到要查找源文件的目录列表中 |
dir | 删除要查找源文件的目录列表 |
symbolfile pathname | 加载外部符号定义 |
symbolfile pathname N | 加载外部符号定义(对地址应用N的偏移量) |
list | 列出从当前位置向前的10行源代码 |
list - | 从当前位置向后列出10行源代码 |
list N | 列出当前文件中第N行开始的10行源代码 |
list path:N | 列出文件path中第N行开始的10行源代码 |
list id | 列出了函数id的10行源代码 |
list * N | 列出来自地址N的10行源代码 |
可以使用','指定结束目标(以更改10行的值)。例如:
list 123, 234 | 列出当前文件中从第123行到第234行的原代码 |
list foo.c:1, 56 | 列出文件foo.c中从第1行到第56行的源代码 |
六、显示表达式
是在执行任何winedbg命令后计算并打印的表达式。
winedbg将自动检测输入的表达式是否包含局部变量。如果包含,则只有当上下文与输入显示表达式时调试器所在的函数仍在同一函数中时,才会显示。
info display | 列出活动的显示表达式 |
display | 打印活动显示表达式的值(每次调试器停止时都会打印) |
display expr | 添加显示表达式expr |
display /fmt expr | 添加表达式expr的显示。按照指定格式打印expr 结果(有关格式的更多信息,请参阅打印命令) |
del display N, undisplay N | 删除显示表达式N |
七、反汇编
disas | 从当前位置反汇编 |
disas expr | 从地址表达式反汇编 |
disas expr, expr | 在两个表达式指定的地址之间反汇编代码 |
八、内存值
x expr | 检查expr地址的内存 |
x /fmt expr | 使用fmt格式检查expr地址处的内存 |
print expr | 打印expr的值(使用其类型格式) |
print /fmt expr | 使用fmt格式打印expr的值 |
set lval=expr | 设置 lval=expr |
whatis expr | 打印表达式expr的C类型 |
set ! symbol_picker interactive | 打印值时,如果找到几个符号,请询问用户要选择哪一个(默认值) |
set ! symbol_picker scopedb | 打印值时,将局部符号优先于全局符号 |
fmt是字母或多个字母(数字和字母之间没有空格),其中字母可以是
s ASCII 字符串
u Unicode UTF16 字符串
i 指令(反汇编)
x 32位无符号十六进制整数
d 32位有符号十进制整数
w 16位无符号十六进制整数
c 字符(实际只打印可打印的0x20-0x7f)
b 8位无符号十六进制整数
g GUID
九、Wine 内部信息
info class | 列出在Wine中注册的所有Windows类 |
info class id | 打印有关Windows类id的信息 |
info share | 列出调试程序中加载的所有动态库(包括.so文件、NE和PE DLL) |
info share N | 在地址N打印模块信息 |
info regs | 打印CPU寄存器的值 |
info all-regs | 打印CPU和浮点寄存器的值 |
info segment N | 打印段N上的信息(仅限i386) |
info segment | 列出所有已分配的段(仅限i386) |
info stack | 打印堆栈顶部的值 |
info map | 列出已调试程序使用的所有虚拟映射 |
info map N | 列出wpid N的程序使用的所有虚拟映射 |
info wnd N | 打印句柄N的窗口信息 |
info wnd | 列出从桌面窗口开始的所有窗口层次结构 |
info process | 列出Wine会话中的所有进程 |
info thread | 列出Wine会话中的所有线程 |
info exception | 列出异常帧(从当前堆栈帧开始) |
十、调试频道
在使用set命令进行调试时,可以打开和关闭调试消息。
set + warn channel | 打开warn频道 |
set + channel | 在频道上打开warn/fixme/err/trace |
set - channel | 在频道上关闭warn/fixme/err/trace |
set - fixme | 在频道上关闭fixme |