GDB常用命令
运行
run(简写r): 运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令。
continue(简写c):继续执行,到下一个断点处(或运行结束)
next(简写n): 单步跟踪程序,当遇到函数调用时,直接调用,不进入此函数体;
step(简写s):单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数的
until:运行程序直到退出循环体; / until+行号: 运行至某行
finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。
call 函数(参数):调用“函数”,并传递“参数”,如:call gdb_test(55)
quit:简记为 q ,退出gdb
设置断点
break n(简写b n):在第n行处设置断点 ;可以带上代码路径和代码名称: b OAGUPDATE.cpp:578)
break func:在函数func()的入口处设置断点,如:break cb_button
delete 断点号n:删除第n个断点
disable 断点号n:暂停第n个断点
enable 断点号n:开启第n个断点
clear 行号n:清除第n行的断点
info breakpoints(简写info b) :显示当前程序的断点设置情况
查看源代码
list(简写l):列出程序的源代码,默认每次显示10行。
list 行号:将显示当前文件以“行号”为中心的前后10行代码,如:list 12
list 函数名:将显示“函数名”所在函数的源代码,如:list main
list :不带参数,将接着上一次 list 命令的,输出下边的内容。
打印表达式
print 表达式:简记为 p ,其中“表达式”可以是任何当前正在被测试程序的有效表达式,比如当前正在调试C语言的程序,那么“表达式”可以是任何C语言的有效表达式,包括数字,变量甚至是函数调用。
print a:将显示整数 a 的值
print ++a:将把 a 中的值加1,并显示出来
print name:将显示字符串 name 的值
print gdb_test(22):将以整数22作为参数调用 gdb_test() 函数
print gdb_test(a):将以变量 a 作为参数调用 gdb_test() 函数
display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如: display a
watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch a
查询运行信息
where/bt :当前运行的堆栈列表
set args 参数:指定运行时的参数
show args:查看设置好的参数
info program: 来查看程序的是否在运行,进程号,被暂停的原因
分割窗口
layout:用于分割窗口,可以一边查看代码,一边测试:
layout src:显示源代码窗口
layout asm:显示反汇编窗口
layout regs:显示源代码/反汇编和CPU寄存器窗口
layout split:显示源代码和反汇编窗口
Ctrl + L:刷新窗口
=====================================================================================================================
----------------------------高级调试-------------------------
=====================================================================================================================
1.按TAB键两次会将命令或者函数名补齐
2.设置断点
break function
break linenum
break +offset 当前行号前offset行
break -offset 当前行号后offset行
break *address 运行内存地址处停止
break 下一行
break ... if condition ... 可以是上述参数
3.设置观察点
watch expr 变量有变化停止
rwatch expr 变量被读停止
awatch expr 变量被读写时停止
4.设置捕捉点
catch event
event有如下:
throw catch exec fork vfork load unload
CODE:
Raised signals may be caught:
catch signal - all signals
catch signal <signame> - a particular signal
Raised exceptions may be caught:
catch throw - all exceptions, when thrown
catch throw <exceptname> - a particular exception, when thrown
catch catch - all exceptions, when caught
catch catch <exceptname> - a particular exception, when caught
Thread or process events may be caught:
catch thread_start - any threads, just after creation
catch thread_exit - any threads, just before expiration
catch thread_join - any threads, just after joins
Process events may be caught:
catch start - any processes, just after creation
catch exit - any processes, just before expiration
catch fork - calls to fork()
catch vfork - calls to vfork()
catch exec - calls to exec()
Dynamically-linked library events may be caught:
catch load - loads of any library
catch load <libname> - loads of a particular library
catch unload - unloads of any library
catch unload <libname> - unloads of a particular library
The act of your program's execution stopping may also be caught:
catch stop
C++ exceptions may be caught:
catch throw - all exceptions, when thrown
catch catch - all exceptions, when caught
6.其他有用的指令
finish 运行程序,直到当前函数完成
until或u运行程序直到退出循环体,用在for或者while上,比较方便
x命令增加如下
CODE:
Examine memory: x/FMT ADDRESS.
ADDRESS is an expression for the memory address to examine.
FMT is a repeat count followed by a format letter and a size letter.
Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),
t(binary), f(float), a(address), i(instruction), c(char) and s(string).
Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).
The specified number of objects of the specified size are printed
according to the format.
Defaults for format and size letters are those previously used.
Default count is 1. Default address is following last thing printed
with this command or "print".
==========================================================
gdb 命令大全
帮助:
help 显示帮助
info 显示程序状态
set 修改
show 显示gdb状态
线程操作:
info threads # 查看所有线程信息
thread 线程id # 切换到指定线程
thread apply [threadno | all ] 参数 # 对所有线程都应用某个命令
子进程调试:
set follow-fork-mode child|parent # fork后,需要跟踪谁
show follow-fork-mode
set detach-on-flow on|off # fork后,需要两个都跟踪吗
info forks # 显示所有进程信息
fork 进程id # 切换到某个进程
detach-fork 进程id # 不再跟踪某个进程
delete fork 进程id # kill某个进程并停止对它的跟踪
查看停止原因:
info program
break(b) 行号|函数名|程序地址 | +/-offset | filenam:func [if 条件] # 在指定位置设置断点
tbreak ... # 与break相似,只是设置一次断点
hbreak ... # 与break相似,只是设置硬件断点,需要硬件支持
thbreak ... # 与break相似,只是设置一次性硬件断点,需要硬件支持
set breadpoint pending auto|on|off # 查看如果断点位置没有找到时行为
show breakpoint pending
set can-use-hw-watchpoints 值 # 设置使用的硬件观察点的数
show can-use-hw-watchpoints
rwatch与awatch需要有硬件支持,另外如果是对局部变量使用watchpoint,那退出作用域时观察点会自动被删除
另外在多线程情况下,gdb的watchpoint只对一个线程有效
捕获点(catchpoint): 程序发生某个事件时停止,如产生异常时
catch 事件名
事件包括:
throw # 产生c++异常
catch # 捕获到c++异常
exec/fork/vfork # 一个exec/fork/vfork函数调用,只对HP-UX
load/unload [库名] # 加载/卸载共享库事件,对只HP-UX
tcatch 事件名 # 一次性catch
info break
断点后操作:
continue(c) [忽略次数] # 继续执行,[忽略前面n次中断]
fg [忽略次数] # 继续执行,[忽略前面n次中断]
step(s) [n步] # 步进,重复n次
next(n) [n步] # 前进,重复n次
finish # 完成当前函数调用,一直执行到返回处,并打印返回值
until(u) [位置] # 一直执行到当前行或指定位置,或是当前函数返回
advance 位置 # 前面到指定位置,如果当前函数返回则停止,与until类似
stepi(si) [n步] # 精确的只执行一个汇编指令,重复n次
nexti(ni) [n步] # 精确的只执行一个汇编指令,碰到函数跳过,重复n次
set step-mode on|off # on时,如果函数没有调试信息也跟进
show step-mode
信号:
info signals # 列出所有信号的处理方式
info handle # 同上
handle 信号 方式 # 改变当前处理某个信号的方式
方式包括:
nostop # 当信号发生时不停止,只打印信号曾经发生过
stop # 停止并打印信号
print # 信号发生时打印
noprint # 信号发生时不打印
pass/noignore # gdb充许应用程序看到这个信号
nopass/ignore # gdb不充许应用程序看到这个信号
线程调度锁:
set scheduler-locking on|off # off时所有线程都可以得到调度,on时只有当前
show scheduler-locking
帧:
frame(f) [帧号] # 不带参数时显示所有帧信息,带参数时切换到指定帧
frame 地址 # 切换到指定地址的帧
up [n] # 向上n帧
down [n] # 向下n帧
select-frame 帧号 # 切换到指定帧并且不打印被转换到的帧的信息
up-silently [n] # 向上n帧,不显示帧信息
down-silently [n] # 向下n帧,不显示帧信息
调用链:
backtrace(bt) [n|-n|full] # 显示当前调用链,n限制显示的数目,-n表示显示后n个,n表示显示前n个,full的话还会显示变量信息
使用 thread apply all bt 就可以显示所有线程的调用信息
set backtrace past-main on|off
show backtrace past-main
set backtrace past-entry on|off
show backtrace past-entry
set backtrace limit n # 限制调用信息的显示层数
show backtrace limit
查看内存:
x /nfu 地址 # 查看内存
例如 x /4xw
输出格式:
x # 16进制
d # 10进制
u # 无符号
o # 8进制
t # 2进制
a # 地址
c # 字符
f # 浮点
n 重复n次
f 显示格式,为print使用的格式
u 每个单元的大小,为
b byte
h 2 byte
w 4 byte
g 8 byte
查看变量历史:
show values 变量名 [n] # 显示变量的上次显示历史,显示n条
show values 变量名 + # 继续上次显示内容
寄存器:
into registers # 除了浮点寄存器外所有寄存器
info all-registers # 所有寄存器
into registers 寄存器名 # 指定寄存器内容
info float # 查看浮点寄存器状态
info vector # 查看向量寄存器状态
gdb为一些内部寄存器定义了名字,
如$pc(指令),$sp(栈指针),$fp(栈帧),$ps(程序状态)
p /x $pc # 查看pc寄存器当前值
x /i $pc # 查看要执行的下一条指令
set $sp += 4 # 移动栈指针
内核中信息:
info udot # 查看内核中user struct信息
info auxv # 显示auxv内容(auxv是协助程序启动的环境变量的)
内存区域限制:
mem 起始地址 结构地址 属性 # 对[地始地址,结构地址)区域内存进行保护,如果结构地址为0表示地址最大值0xffffffff
delete mem 编号 # 删除一个内存保护
disable mem 编号 # 禁止一个内存保护
enable mem 编号 # 打开一个内存保护
info mem # 显示所有内存保护信息
保护的属性包括:
1. 内存访问模式: ro | wo |rw
2. 内存访问大小: 8 | 16 | 32 | 64 如果不限制,表示可按任意大小访问
3. 数据缓存: cache | nocache cache表示充许gdb缓存目标内存
内存复制到/从文件:
dump [格式] memory 文件名 起始地址 结构地址 # 把指定内存段写到文件
dump [格式] value 文件名 表达式 # 把指定值写到文件
格式包括:
binary 原始二进制格式
ihex intel 16进制格式
srec S-recored格式
tekhex tektronix 16进制格式
append [binary] memory 文件名 起始地址 结构地址 # 按2进制追加到文件
append [binary] value 文件名 表达式 # 按2进制追加到文件
restore 文件名 [binary] bias 起始地址 结构地址 # 恢复文件中内容到内存.如果文件内容是原始二进制,需要指定binary参数,不然会gdb自动识别文件格式
产生core dump文件
gcore [文件名] # 产生core dump文件
字符集:
set target-charset 字符集 # 声明目标机器的locale,如gdbserver所在机器
set host-charset 字符集 # 声明本机的locale
set charset 字符集 # 声明目标机和本机的locale
show charset
show host-charset
show target-charset
缓存远程目标的数据:为提高性能可以使用数据缓存,不过gdb不知道volatile变量,缓存可能会显示不正确的结构
set remotecache on | off
show remotecache
info dcache # 显示数据缓存的性能
C预处理宏:
macro expand(exp) 表达式 # 显示宏展开结果
macro expand-once(expl) 表达式 # 显示宏一次展开结果
macro info 宏名 # 查看宏定义
tdump # 显示当前记录中追踪信息
save-tracepoints 文件名 # 保存追踪信息到指定文件,后面使用source命令读
追踪中的便利变量:
$trace_frame # 当前帧编号, -1表示没有, INT
$tracepoint # 当前追踪,INT
$trace_line # 位置 INT
$trace_file # 追踪文件 string, 需要使用output输出,不应用printf
$trace_func # 函数名 string
覆盖技术(overray): 用于调试过大的文件
gdb文件:
file 文件名 # 加载文件,此文件为可执行文件,并且从这里读取符号
core 文件名 # 加载core dump文件
exec-file 文件名 # 加载可执行文件
symbol-file 文件名 # 加载符号文件
add-symbol-file 文件名 地址 # 加载其它符号文件到指定地址
add-symbol-file-from-memory 地址 # 从指定地址中加载符号
add-share-symbol-files 库文件 # 只适用于cygwin
session 段 地址 # 修改段信息
info files | target # 打开当前目标信息
maint info sections # 查看程序段信息
set truct-readonly-sections on | off # 加快速度
show truct-readonly-sections
set auto-solib-add on | off # 修改自动加载动态库的模式
show auto-solib-add
运行
run(简写r): 运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令。
continue(简写c):继续执行,到下一个断点处(或运行结束)
next(简写n): 单步跟踪程序,当遇到函数调用时,直接调用,不进入此函数体;
step(简写s):单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数的
until:运行程序直到退出循环体; / until+行号: 运行至某行
finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。
call 函数(参数):调用“函数”,并传递“参数”,如:call gdb_test(55)
quit:简记为 q ,退出gdb
设置断点
break n(简写b n):在第n行处设置断点 ;可以带上代码路径和代码名称: b OAGUPDATE.cpp:578)
break func:在函数func()的入口处设置断点,如:break cb_button
delete 断点号n:删除第n个断点
disable 断点号n:暂停第n个断点
enable 断点号n:开启第n个断点
clear 行号n:清除第n行的断点
info breakpoints(简写info b) :显示当前程序的断点设置情况
查看源代码
list(简写l):列出程序的源代码,默认每次显示10行。
list 行号:将显示当前文件以“行号”为中心的前后10行代码,如:list 12
list 函数名:将显示“函数名”所在函数的源代码,如:list main
list :不带参数,将接着上一次 list 命令的,输出下边的内容。
打印表达式
print 表达式:简记为 p ,其中“表达式”可以是任何当前正在被测试程序的有效表达式,比如当前正在调试C语言的程序,那么“表达式”可以是任何C语言的有效表达式,包括数字,变量甚至是函数调用。
print a:将显示整数 a 的值
print ++a:将把 a 中的值加1,并显示出来
print name:将显示字符串 name 的值
print gdb_test(22):将以整数22作为参数调用 gdb_test() 函数
print gdb_test(a):将以变量 a 作为参数调用 gdb_test() 函数
display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如: display a
watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch a
查询运行信息
where/bt :当前运行的堆栈列表
set args 参数:指定运行时的参数
show args:查看设置好的参数
info program: 来查看程序的是否在运行,进程号,被暂停的原因
分割窗口
layout:用于分割窗口,可以一边查看代码,一边测试:
layout src:显示源代码窗口
layout asm:显示反汇编窗口
layout regs:显示源代码/反汇编和CPU寄存器窗口
layout split:显示源代码和反汇编窗口
Ctrl + L:刷新窗口
=====================================================================================================================
----------------------------高级调试-------------------------
=====================================================================================================================
1.按TAB键两次会将命令或者函数名补齐
2.设置断点
break function
break linenum
break +offset 当前行号前offset行
break -offset 当前行号后offset行
break *address 运行内存地址处停止
break 下一行
break ... if condition ... 可以是上述参数
3.设置观察点
watch expr 变量有变化停止
rwatch expr 变量被读停止
awatch expr 变量被读写时停止
4.设置捕捉点
catch event
event有如下:
throw catch exec fork vfork load unload
CODE:
Raised signals may be caught:
catch signal - all signals
catch signal <signame> - a particular signal
Raised exceptions may be caught:
catch throw - all exceptions, when thrown
catch throw <exceptname> - a particular exception, when thrown
catch catch - all exceptions, when caught
catch catch <exceptname> - a particular exception, when caught
Thread or process events may be caught:
catch thread_start - any threads, just after creation
catch thread_exit - any threads, just before expiration
catch thread_join - any threads, just after joins
Process events may be caught:
catch start - any processes, just after creation
catch exit - any processes, just before expiration
catch fork - calls to fork()
catch vfork - calls to vfork()
catch exec - calls to exec()
Dynamically-linked library events may be caught:
catch load - loads of any library
catch load <libname> - loads of a particular library
catch unload - unloads of any library
catch unload <libname> - unloads of a particular library
The act of your program's execution stopping may also be caught:
catch stop
C++ exceptions may be caught:
catch throw - all exceptions, when thrown
catch catch - all exceptions, when caught
6.其他有用的指令
finish 运行程序,直到当前函数完成
until或u运行程序直到退出循环体,用在for或者while上,比较方便
x命令增加如下
CODE:
Examine memory: x/FMT ADDRESS.
ADDRESS is an expression for the memory address to examine.
FMT is a repeat count followed by a format letter and a size letter.
Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),
t(binary), f(float), a(address), i(instruction), c(char) and s(string).
Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).
The specified number of objects of the specified size are printed
according to the format.
Defaults for format and size letters are those previously used.
Default count is 1. Default address is following last thing printed
with this command or "print".
==========================================================
gdb 命令大全
帮助:
help 显示帮助
info 显示程序状态
set 修改
show 显示gdb状态
线程操作:
info threads # 查看所有线程信息
thread 线程id # 切换到指定线程
thread apply [threadno | all ] 参数 # 对所有线程都应用某个命令
子进程调试:
set follow-fork-mode child|parent # fork后,需要跟踪谁
show follow-fork-mode
set detach-on-flow on|off # fork后,需要两个都跟踪吗
info forks # 显示所有进程信息
fork 进程id # 切换到某个进程
detach-fork 进程id # 不再跟踪某个进程
delete fork 进程id # kill某个进程并停止对它的跟踪
查看停止原因:
info program
break(b) 行号|函数名|程序地址 | +/-offset | filenam:func [if 条件] # 在指定位置设置断点
tbreak ... # 与break相似,只是设置一次断点
hbreak ... # 与break相似,只是设置硬件断点,需要硬件支持
thbreak ... # 与break相似,只是设置一次性硬件断点,需要硬件支持
set breadpoint pending auto|on|off # 查看如果断点位置没有找到时行为
show breakpoint pending
set can-use-hw-watchpoints 值 # 设置使用的硬件观察点的数
show can-use-hw-watchpoints
rwatch与awatch需要有硬件支持,另外如果是对局部变量使用watchpoint,那退出作用域时观察点会自动被删除
另外在多线程情况下,gdb的watchpoint只对一个线程有效
捕获点(catchpoint): 程序发生某个事件时停止,如产生异常时
catch 事件名
事件包括:
throw # 产生c++异常
catch # 捕获到c++异常
exec/fork/vfork # 一个exec/fork/vfork函数调用,只对HP-UX
load/unload [库名] # 加载/卸载共享库事件,对只HP-UX
tcatch 事件名 # 一次性catch
info break
断点后操作:
continue(c) [忽略次数] # 继续执行,[忽略前面n次中断]
fg [忽略次数] # 继续执行,[忽略前面n次中断]
step(s) [n步] # 步进,重复n次
next(n) [n步] # 前进,重复n次
finish # 完成当前函数调用,一直执行到返回处,并打印返回值
until(u) [位置] # 一直执行到当前行或指定位置,或是当前函数返回
advance 位置 # 前面到指定位置,如果当前函数返回则停止,与until类似
stepi(si) [n步] # 精确的只执行一个汇编指令,重复n次
nexti(ni) [n步] # 精确的只执行一个汇编指令,碰到函数跳过,重复n次
set step-mode on|off # on时,如果函数没有调试信息也跟进
show step-mode
信号:
info signals # 列出所有信号的处理方式
info handle # 同上
handle 信号 方式 # 改变当前处理某个信号的方式
方式包括:
nostop # 当信号发生时不停止,只打印信号曾经发生过
stop # 停止并打印信号
print # 信号发生时打印
noprint # 信号发生时不打印
pass/noignore # gdb充许应用程序看到这个信号
nopass/ignore # gdb不充许应用程序看到这个信号
线程调度锁:
set scheduler-locking on|off # off时所有线程都可以得到调度,on时只有当前
show scheduler-locking
帧:
frame(f) [帧号] # 不带参数时显示所有帧信息,带参数时切换到指定帧
frame 地址 # 切换到指定地址的帧
up [n] # 向上n帧
down [n] # 向下n帧
select-frame 帧号 # 切换到指定帧并且不打印被转换到的帧的信息
up-silently [n] # 向上n帧,不显示帧信息
down-silently [n] # 向下n帧,不显示帧信息
调用链:
backtrace(bt) [n|-n|full] # 显示当前调用链,n限制显示的数目,-n表示显示后n个,n表示显示前n个,full的话还会显示变量信息
使用 thread apply all bt 就可以显示所有线程的调用信息
set backtrace past-main on|off
show backtrace past-main
set backtrace past-entry on|off
show backtrace past-entry
set backtrace limit n # 限制调用信息的显示层数
show backtrace limit
查看内存:
x /nfu 地址 # 查看内存
例如 x /4xw
输出格式:
x # 16进制
d # 10进制
u # 无符号
o # 8进制
t # 2进制
a # 地址
c # 字符
f # 浮点
n 重复n次
f 显示格式,为print使用的格式
u 每个单元的大小,为
b byte
h 2 byte
w 4 byte
g 8 byte
查看变量历史:
show values 变量名 [n] # 显示变量的上次显示历史,显示n条
show values 变量名 + # 继续上次显示内容
寄存器:
into registers # 除了浮点寄存器外所有寄存器
info all-registers # 所有寄存器
into registers 寄存器名 # 指定寄存器内容
info float # 查看浮点寄存器状态
info vector # 查看向量寄存器状态
gdb为一些内部寄存器定义了名字,
如$pc(指令),$sp(栈指针),$fp(栈帧),$ps(程序状态)
p /x $pc # 查看pc寄存器当前值
x /i $pc # 查看要执行的下一条指令
set $sp += 4 # 移动栈指针
内核中信息:
info udot # 查看内核中user struct信息
info auxv # 显示auxv内容(auxv是协助程序启动的环境变量的)
内存区域限制:
mem 起始地址 结构地址 属性 # 对[地始地址,结构地址)区域内存进行保护,如果结构地址为0表示地址最大值0xffffffff
delete mem 编号 # 删除一个内存保护
disable mem 编号 # 禁止一个内存保护
enable mem 编号 # 打开一个内存保护
info mem # 显示所有内存保护信息
保护的属性包括:
1. 内存访问模式: ro | wo |rw
2. 内存访问大小: 8 | 16 | 32 | 64 如果不限制,表示可按任意大小访问
3. 数据缓存: cache | nocache cache表示充许gdb缓存目标内存
内存复制到/从文件:
dump [格式] memory 文件名 起始地址 结构地址 # 把指定内存段写到文件
dump [格式] value 文件名 表达式 # 把指定值写到文件
格式包括:
binary 原始二进制格式
ihex intel 16进制格式
srec S-recored格式
tekhex tektronix 16进制格式
append [binary] memory 文件名 起始地址 结构地址 # 按2进制追加到文件
append [binary] value 文件名 表达式 # 按2进制追加到文件
restore 文件名 [binary] bias 起始地址 结构地址 # 恢复文件中内容到内存.如果文件内容是原始二进制,需要指定binary参数,不然会gdb自动识别文件格式
产生core dump文件
gcore [文件名] # 产生core dump文件
字符集:
set target-charset 字符集 # 声明目标机器的locale,如gdbserver所在机器
set host-charset 字符集 # 声明本机的locale
set charset 字符集 # 声明目标机和本机的locale
show charset
show host-charset
show target-charset
缓存远程目标的数据:为提高性能可以使用数据缓存,不过gdb不知道volatile变量,缓存可能会显示不正确的结构
set remotecache on | off
show remotecache
info dcache # 显示数据缓存的性能
C预处理宏:
macro expand(exp) 表达式 # 显示宏展开结果
macro expand-once(expl) 表达式 # 显示宏一次展开结果
macro info 宏名 # 查看宏定义
tdump # 显示当前记录中追踪信息
save-tracepoints 文件名 # 保存追踪信息到指定文件,后面使用source命令读
追踪中的便利变量:
$trace_frame # 当前帧编号, -1表示没有, INT
$tracepoint # 当前追踪,INT
$trace_line # 位置 INT
$trace_file # 追踪文件 string, 需要使用output输出,不应用printf
$trace_func # 函数名 string
覆盖技术(overray): 用于调试过大的文件
gdb文件:
file 文件名 # 加载文件,此文件为可执行文件,并且从这里读取符号
core 文件名 # 加载core dump文件
exec-file 文件名 # 加载可执行文件
symbol-file 文件名 # 加载符号文件
add-symbol-file 文件名 地址 # 加载其它符号文件到指定地址
add-symbol-file-from-memory 地址 # 从指定地址中加载符号
add-share-symbol-files 库文件 # 只适用于cygwin
session 段 地址 # 修改段信息
info files | target # 打开当前目标信息
maint info sections # 查看程序段信息
set truct-readonly-sections on | off # 加快速度
show truct-readonly-sections
set auto-solib-add on | off # 修改自动加载动态库的模式
show auto-solib-add