暂停机制
1、断点
2、监视点
3、捕获点
以上都可以暂停程序,但是其本意有区别, 都可以用delete删除。
断点概念
程序停止点
跟踪断点
1、查看断点列表
info breakpoints
设置断点
1、break function
2、break filename:line number
3、break filename:function
断点的持久性
gdb如果不退出,在修改代码后再执行run,gdb能够感知到代码已修改,并适应新的版本。
删除和禁用断点
删除断点
1、delete breakpoint_list_id
2、 delete --删除所有断点
3、clear 清楚gdb将执行的下一个断点。
4、clear function、clear filename:function、clear linenumber、clear filename:funciton 清楚指定位置的断点。
恢复执行
1、step和next , step会进入函数,next跳过函数执行。 注意step不会在不具有调试信息的代码。
2、continue 或者continue number , number为忽略几个断点,没有number为跳过1个断点。
3、finish 直接跳到函数尾部。
4、until 退出循环
条件断点
break break-args if condition
break-args 可以为设置断点的各种方法
断点命令集
commands breakpoint-number
...
commands
...
ends
每当进入断点,将会执行command之间的内容。
1、命令会一直打印一些附属信息,如果不打印,可以在命令集开头输入slient。
2、每当进入相同断点就会停止,可以在ends之前添加continue
另外如果多个command中有相同的命令,可以采用define 将相同点抽出,在每个command中使用。
可以用show user 列出所有的宏定义。
监视点
命令:
watch i
或者带复杂表达式:
watch (i | j >12) ...
注意监视的是指监视的点的值/表达时有变化,并且退出监视的变量作用域将会自动删除监视点断点。
监视值变化对于当值赋值给指针,通过指针来修改该值也能监视到!注意这个隐含的特性。
表达式
表达式可以包含很多中
1、gdb 方便变量 方便变量: gdb自己定义的变量。
2、程序中的任何在作用域内的变量。
3、任何种类的字符串、数值或者字符常量。
4、预处理器宏 (指语言中的宏, 但是gcc 需要加 -g3
5、条件、函数调用、类型强制转换和所有语言定义的运算符。
网友评论