命令输出到日志
第一步:开启日志记录
.logopen d:\dbglog.txt
第二步:用命令或通过菜单输入调试命令,观察输出结果
kb
第三步:关闭日志记录
.logclose
之后,就可以去查看log文件了,也可以用命令打开.logfile
查看可执行文件的信息
lmv m virtual!lmi virtual
vertarget
设置显示格式好看一点 set print pretty on gdb上面这种的
查看断点信息
bl
设置断点信息
有地址bp
有符号bp virtual!main
有源码找到对应行直接F9
清除断点信息
bc 序号
找到符号地址
x virtual!main
寻找帮助
.hh x 这样可以直接查找相应的文档
查看寄存器的值
r eax
查看所有寄存器的值
r
修改寄存器的值
r eax=1
查看对应内存页的属性
!address eip 前面有一个感叹号表示扩展功能
列出当前进程中加载的所有dll文件和对应的路径
lmf
显示所有模块详细信息
lmD
可以查看任意一个dll的详细信息
lmvm winhafnt
显示内存内容 Display
dd 地址
反汇编 Unassemble 把源代码翻译成汇编输出
u main
u 地址
uf main
uf test!main
查看局部变量
dv p1
查看全部的局部变量 Display Local Variables
dv
修改内存内容 Enter Values
ed 地址 值
寻找内存
s (Search Memory)
每个线程的消耗的时间
!runaway
显示线程的信息
~
列出当前进程中的所有线程的详细信息
~*
列出所有线程的堆栈 []
~*kb
~*kc 干净清爽
显示当前线程的堆栈 [Display Stack Backtrace]
k
kn 栈的编号显示出来
kb显示堆栈桢地址,返回地址,参数,函数名等
kv增加了函数调用约定等信
查找符号的二进制地址如下
x virtual!main
x argc
就是符号的地址,而不是符号的值
切换帧
.frame 0
.frame 1
查看当前局部变量
在当前帧下面x,dv
打印变量的类型
dt var
dt var -b -r
dt testApp!g_appInstance 表示显示testApp里全局变量g_appInstance的内存布局
对内存访问设置断点 这个是硬件断点
ba
break on access
清屏
.cls
单步执行一条汇编指令并显示所有寄存器的状态
P step
死锁
!locks
获取整个进程或者某一个handle的详细信息
!handle
设置符号文件路径
SRV*d:\symbols* http://msdl.microsoft.com/download/symbols
之后进行.reload
显示临界区
!cs
针对某线程设置断点,只要在命令前加~线程号:
比如 ~0 bp 0x441242, 表示0号线程执行到地址0x441242时中断
No runnable debuggees error in 'p'
终止一个很长时间没有完成的命令
Ctrl+Break
通过n命令查看和设置当前进制
单步调试
g 继续运行(go), 热键F5
t 单步越过(step over), 热键F10
p 单步进入(step into), 热键F11
重新启动
.restart