以下部分是再读《软件调试的艺术》一书过程中记下的部分读书笔记,因为只看了和GDB有关的方法,所以只有GDB命令
在gdb与GUI调试之间取折中的方法,TUI(terminal user interface)
为了在tui模式运行gdb,在gdb命令上加入-tui
或者在gdb中使用ctrl+x+a组合键(进入与退出)
Tui: * 表示断点
> 表示当前代码行
与tui相同类型的gdb界面,CGDB
gdb调试命令
run 命令运行程序
break + 行号(函数名) 设置断点
break + filename:line_number/function
break source.c:35
condition + num + 条件 断点有效的条件(将正常断点转变为条件断点)
删除条件 cond + num
详见本书67页
break break-args if (condition) 增加条件断点
info breakpoints查看断点信息
delate + 1 3 4 删除 1 3 4 断点
tbreak 临时断点,只在第一次到达时有效,具体用法同上
clear + 行号 删除下一个将要执行的断点
clear + function / filename:function/line_number
disable + <num> 禁用断点
enalble + <num> 启用断点
enable once + <num> 启用一次断点
next 执行下一行
step 同上,但是会进入函数
continue 继续执行,直到遇到断点
continue + <num> 忽略接下来的num个断点
finish 执行完当前函数
until 执行完当前函数(如果有断点则进入断点)
print + <ver> 打印当前变量值
watch + <ver> 设置监视点,当指定变量改变时暂定程序执行
frame + <num> 查看以前的栈帧
backtrace 现实整个栈,当前存在的所有帧的集合
up
down 上下移动栈的位置
command 使用断点命令列表
printf 用法同C语言
silent 减少输出(需要时命令列表中的第一个)
define 定义宏
show user 得到所有宏的列表
continue 在执行完命令列表后 继续执行程序(需要是最后一个命令)
help breakpoints 查看breakpoints的帮助文档
break 30 if num=1, 顾名思义
gdb <文件名> -tui 运行<文件名>并且启动terminal usr interface
在gcc调试中,需要-g选项让编译器将符号表,保存在省城的可执行文件中,这个步骤在使用gdb调试时是必要的。
在重新编译代码时,可以不退出GDB,断点会保留
gdb的启动文件默认名为 .gdbinit 存放于主目录中;
但是也可以通过,gdb-command=z x 命令来在可执行文件x上运行GDB,同时从文件z中读取命令
gdb的三种暂定机制:
- 断点
- 监视点 //特定值发生变化时
- 捕获点 //特定事件发生的时候