目录
- 1、Assert
- 2、GDB
- 2.1 使用流程
- 2.2 断点和条件中断
- 2.3 常用的指令
1、Assert
引用自
的函数assert(int expression)
,当表达式的值为0则返回failed
。
2、GDB
gdb是GUN的提供在unix上的调试工具。
安装:sudo apt install gdb
如果是windows,则寻找对应的exe安装即可,同时需要配置环境变量
2.1 使用流程
# 编译,得到executable程序
# -g指令会列出行号、注释信息
gcc -g -o executable one.c two.c other.c
# gdb调试
gdb executable
# 指定某行打断点,或者指定某个函数为断点
break one:17
break main
#运行
run [args]
# 显示待验证的变量值,此后每次停下来都会显示这些变量值
display var1
display var2
# 快进到下一个断点/或者运行到结尾
continue
# 退出
quit
2.2 断点和条件中断
着重说一下断点的标识和查询。
怎么打断点
# 直接在函数上打断点
break
# 作用在指定行上,如果是多文件,可以使用filename指定特定的源文件
break :line_num
断点信息查询以及断点的删除、禁用等
# 查询全部的断点,显示信息的第一列是每一个断点id
info breakpoints
#删除断点
delete break_id
# 禁用断点
disable break_id
#重启被禁用的断点
enable break_id
#忽略断点times次
#也就意味着,在运行到断点times次以后,断点会再次生效
ignore break_id times
条件中断
条件中断,即满足指定条件才会触发中断的断点,某些时候这非常有用,譬如某些信号量达到预定值才会触发中断,如果Java中的异常中断一样。
# 设置条件断点
break line_num if [expression]
譬如,break swap if m > 100
,需要注意只有在断点处m变量生效,该条件才会生效。
对于已经设置的断点可以使用condition
指定:
# 给break_id断点设置中断条件
condition break_id [expresion]
# 取消中断条件,只要后面什么条件也不跟即可
condition break_id
2.3 常用的指令
help-帮助指令
run-运行
quit-退出
break-打断点,可以断某个行或者某个函数如`break main`
next-下一行,简写`n`
step-也是下一行,不同于next的是,如果某个行本身引用了函数,则会step into到该函数内部去,简写`s`
finish-跳出当前函数/或者打到下一个断点
continue,下一个断点或者运行到结尾,简写`c`
display-跟踪打印某个变量的值
print-一次打印当前状态下所指定变量的值
detele-删除全部断点
info breakpoint-全部断点信息
clear-清楚断点,clear function,清楚函数断点
until-类似于next,但是在循环中时,它可以一步到位直接到循环结束,而不像next一样执行每一次迭代
list-列出当前行上下的代码,list function列出函数的代码