一、控制 Debugger 的命令
1、q|quit|exit :退出Debugger 和 中止模拟器执行。
2、set
(1)set <regname> = <expr>:设置寄存器的值为‘expr’。
(2)set $eflags = <expr>:设置eflags的值为‘expr’;但是不是所有标志位都能够设置。
(3)set $cpu = <N>:在模拟SMP时,将Debugger控制的cpu设置为cpu<N>。
(4) set $auto_disassamebly=1:在每一次执行停止时,Debugger反汇编当前的准备执行的指令。
(5)set u|disassemble on:与set $auto_disassemble=1
(6)set u|disassemble off:和set $auto_disassemble=0
3、instrument <command>:
用<command>回调BX_INSTR_DEBUG_CMD指令。
4、show
(1)show <command>:切换<command>执行结果显示信息的方式。
(2)show:显示当前提示信息的显示模式(方式)。
(3)show mode:处理器切换模式的时候显示提示。
(4)show int:中断发生时显示提示。
(5)show softint:软中断发生时显示提示。
(6)show extint:外部中断发生时显示提示。
(7)show call:调用发生时显示提示。
(8)show iret:iret发生时显示提示。
(9) show all:打开所有的提示信息显示功能。
(10)show off:关闭所有的提示信息显示功能。
(11)show dbg_all:打开所有bx_dbg 标志。
(12)show dbg_none:关闭所有bx_dbg标志。
二、执行控制的命令
1、c|cont|continue:继续执行指令直到遇到中断。
2、c of “expression”:仅当表达式为真时继续执行指令。
3、s|step [count]:在当前处理器上执行#count条指令,默认是一条。
s|step [cpu] <count>:在#cpu上执行#count条指令。
s|step all <count>: 在所有cpu上执行#count条指令。
4、n|next|p:执行完一个子程序。
5、modebp:切换模式转换时的中断状态。即模式转换的时候程序是不是停下来。
6、vmexitbp:切换VMEXIT 转换时的否中断状态。
三、断点管理命令
1、vb|vbreak <seg:offset>:在虚拟地址<seg:offset>所在指令处设置中断点。
vb|vbreak <seg:offset> if "expression" : 条件为真时在虚拟地址的指令处设置中断。
2、lb|lbreak <addr>:在线性地址<addr>的指令处设置中断。
lb|lbreak <addr> if "expression":当条件为真时,在线性地址<addr>的指令处设置中断。
3、pb|pbreak|b|break <addr>:在物理地址<addr>的指令处设置中断点。
pb <addr> if "expression":当条件为真时,在物理地址<addr>的指令处设置中断点。
4、sb <delta>:在将来#delta个指令周期时插入一条时间断点 。
5、sba <time>:在指定的时间插入断点。(在当前指令周期后,t=1058890,time>t才可用)
6、blist:列出所有断点。作用和info break命令相同。
7、bpe <N>:激活#N号中断。
8、bpd <N>:禁用#N号中断。
9、d|delete|del <N>:删除#N号中断。
10、watch:显示观察点的状态
(1)watch stop:到观察点停下来。
(2)watch continue:到达观察点不停。
(3)watch r|read addr:在物理地址addr处插入一个读内存观察点。
(4)watch w|write addr:在物理地址addr处插入一个写内存观察点。
(5)watch r|read addr <len>:以物理地址addr开始#len长度的范围插入一个读内存观察点。
(6)watch w|write addr <len>:以物理地址addr开始#len长度的范围插入一个写内存观察点。
(7)unwatch:移除所有观测点。
(8)unwatch addr:移除addr处的观察点。
四、cpu和内存的控制
1、x /nuf <addr>:检测内存线性地址addr处的值。
xp /nuf <addr>:检测内存物理地址addr处的值。
nuf:一个字母序列,其值和含义如下:
内存数据显示格式:x--16进制格式显示,d--十进制格式显示,u--无符号数格式显示,o--八进制格式显示,t--二进制格式显示,c--字符格式显示,s--ascii格式显示,i--字符串格式显示。
显示的数据的宽度:b--字节方式,h--2字节方式,w--4字节方式,g--系统定义的最大宽度。
m--可供替代的显示输出格式(内存转储)
2、setpmem <addr> <datasize> <val>:以<datasize>的格式将物理内存<addr>处的值设置为<val>。
3、writemem <filename> <laddr> <len>:将从虚拟地址<laddr>开始的<len>字节的内存中的内存转储到文件<filename>中。
4、crc <addr1> <addr2>:显示物理内存<addr1>到<addr2>范围的crc值。
5、info
(1)info break:和blist相同。
(2)info cpu:显示所有cpu的寄存器数据。
(3) info idt:显示中断描述符表。
(4)info ivt:显示中断向量表。
(5)info gdt:显示全局描述符表。
(6)info tss:显示当前任务状态段。
(7)info tab:显示页表。
(8)info eflags:显示eflags寄存器的状态(以解码后的形式展现)。
(9)info symbols [string]:列出以[string]开头的符号。
(10)info device:列出此命令支持的设备。
info device [string]:显示指定设备的[string]指示子设备的状态。
info device [string] [string]: 显示子设备的状态。
6、r|reg|regs|registers:列出cpu的寄存器和寄存器里面的内容。和info r命令相同。
7、fp|fpu:列出fpu的内容。
8、mmx:列出mmx的内容。
9、sse:列出sse的内容。
10、sreg:列出段寄存器的内容。
11、dreg:列出debug寄存器的内容。
12、creg:列出控制寄存器的内容。
13、page <laddr>:显示<laddr>处线性地址对应物理地址的关系。
14、ptime:显示当前时间。(从模拟器启动到当前指令的ticks数)。
15、print-stack [num_word]:显示栈的情况,以16位字为单位的数量。
16、calc|?<expr>:计算表达式并显示结果。
‘expr’ 可以是任何通用的操作,比如掩码操作和段寄存器操作、任何算术和逻辑操作,也可以在实模式和v86模式下用‘:’操作符以segment:offset的方式计算线性地址或者在保护模式下用':'操作符 以 selector:offset的方式计算线性地址。
五、bochs的工作参数
1、show--与第一段相同
2、restore <filename> [path]:从一个文件中恢复bochs的root参数。例如:
restore "cpu0" -- 从当前目录下、cpu0文件恢复参数。
restore "cpu0" "/sava" -- 从/save目录下、cpu0文件恢复参数。