GDB 学习
2016-04-13 11:36
211 查看
通常使用gdb在Linux下调试C/C++程序,编译的时候加上-g选项(gcc -g ......)。下面总结的是我自己经常使用(当然也有一些用的比较少)的gdb命令。
(1)开始及退出
开始:gdb program
退出:quit (简写q)或者Ctrl+d
(2)自动补全:Tab
(3)启动程序:
run(简写r):运行程序直到遇到断点
与srart的区别:start会在程序的入口函数(通常是main)设置一个临时断点,然后调用run。
(4)断点(breakpoint):简写b
设置断点:
break 函数名:在指定函数入口处设置断点
break 函数名[or 行号 or 地址] if 条件(就是一个布尔表达式,但是不需要加括号)
break 行号:在指定行设置断点
break 地址
break filename 行号[or 函数名]
break,无参的话会在下一条指令处设置断点。
删除断点:(断点号可由info break获得)
delete 断点号。(也可以删除断点的集合:delete 2-5)
disable 断点号:暂停使用该断点
enable 断点号:重新启用该断点
clear 行号 or 函数名 :删除指定地点的所有断点(比如clear fun,则删除fun函数中所有的断点)
delete breakpoints:删除所有的断点
(5)打印信息
print(简写p):后接表达式。常用的比如:变量,函数
display 表达式。与print的区别,使用display设置一个表达式后,在以后的每次单步执行后,都会输出所设置表达式的值。
info可以用来查看寄存器、断点等信息。
info break:查看所有断点。
info threads:查看正在运行程序中的(默认显示所有线程)线程信息
(6)查看源码
list(简写l):查看程序源码,默认显示10行
list 行号:显示指定以行号为中心的前后共10行代码
list 函数名:显示指定函数的源码,也是10行
list:接着上一次list命令,继续输出后面的源码
list -:同上,但是是往前走。即接着上一次list命令显示的代码,输出前面的源码
(7)跟踪执行
step(简写s):单步执行。遇到函数,进入该函数内部。
next(简写n):单步执行。遇到函数不会进入该函数内部。
until(简写u):运行程序直到退出循环体。
until 行号:运行至指定行。
finish(简写fin):运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址、返回值、参数值等信息。
continue(简写c):继续运行程序直到遇到下一个断点或者程序运行结束。
(8)程序回滚
checkpoint
restart checkpoint-id:将程序回滚到设置该checkpoint的时刻
info checkpoint:查看所有checkpoint,可以获取checkpoint-id
(9)观察点(watchpoint),特殊的断点。
观察点使用watch命令,命令格式与break相同,但它并不是指明断点的位置,而是指明一个表达式,每当该表达式的值改变时,程序便会被暂停。表达式可以是某个变量、由若干变量组成的表达式或者内存地址。
info wachpoints:查看所有观察点。
{捕捉点(catchpoint),也是特殊的断点。使用某种事件的发生作为触发条件。}
(1)开始及退出
开始:gdb program
退出:quit (简写q)或者Ctrl+d
(2)自动补全:Tab
(3)启动程序:
run(简写r):运行程序直到遇到断点
与srart的区别:start会在程序的入口函数(通常是main)设置一个临时断点,然后调用run。
(4)断点(breakpoint):简写b
设置断点:
break 函数名:在指定函数入口处设置断点
break 函数名[or 行号 or 地址] if 条件(就是一个布尔表达式,但是不需要加括号)
break 行号:在指定行设置断点
break 地址
break filename 行号[or 函数名]
break,无参的话会在下一条指令处设置断点。
删除断点:(断点号可由info break获得)
delete 断点号。(也可以删除断点的集合:delete 2-5)
disable 断点号:暂停使用该断点
enable 断点号:重新启用该断点
clear 行号 or 函数名 :删除指定地点的所有断点(比如clear fun,则删除fun函数中所有的断点)
delete breakpoints:删除所有的断点
(5)打印信息
print(简写p):后接表达式。常用的比如:变量,函数
display 表达式。与print的区别,使用display设置一个表达式后,在以后的每次单步执行后,都会输出所设置表达式的值。
info可以用来查看寄存器、断点等信息。
info registers:查看除了浮点寄存器以外的寄存器
info all-registers:查看所有寄存器,包括浮点寄存器
info registers <regname ...> :查看所指定的寄存器
info break:查看所有断点。
info threads:查看正在运行程序中的(默认显示所有线程)线程信息
(6)查看源码
list(简写l):查看程序源码,默认显示10行
list 行号:显示指定以行号为中心的前后共10行代码
list 函数名:显示指定函数的源码,也是10行
list:接着上一次list命令,继续输出后面的源码
list -:同上,但是是往前走。即接着上一次list命令显示的代码,输出前面的源码
(7)跟踪执行
step(简写s):单步执行。遇到函数,进入该函数内部。
next(简写n):单步执行。遇到函数不会进入该函数内部。
until(简写u):运行程序直到退出循环体。
until 行号:运行至指定行。
finish(简写fin):运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址、返回值、参数值等信息。
continue(简写c):继续运行程序直到遇到下一个断点或者程序运行结束。
(8)程序回滚
checkpoint
restart checkpoint-id:将程序回滚到设置该checkpoint的时刻
info checkpoint:查看所有checkpoint,可以获取checkpoint-id
(9)观察点(watchpoint),特殊的断点。
观察点使用watch命令,命令格式与break相同,但它并不是指明断点的位置,而是指明一个表达式,每当该表达式的值改变时,程序便会被暂停。表达式可以是某个变量、由若干变量组成的表达式或者内存地址。
info wachpoints:查看所有观察点。
{捕捉点(catchpoint),也是特殊的断点。使用某种事件的发生作为触发条件。}
相关文章推荐
- opencv之边界扩展copyMakeBorder
- C# 读取数据表没有主键的问题
- Web应用——驾培管理系统之系统—权限分配
- 格式化sd 卡linux 脚本学习
- iOS 模态跳转与返回
- [Android] Material 风格的 Dialog 的使用
- Android--JNI简单的实例解析
- java并发系列:深入分析Synchronized
- 我的List坑
- HTTP 缓存策略
- 为什么要有层次结构?
- 为什么要加上拉电阻和下拉电阻
- Java并发包中的同步队列SynchronousQueue实现原理
- 如何高效的查询数组中是否包含某个值
- 队列模式
- Visual studio 扩展工具
- boost::scoped_ptr用法
- label中的文字类似跑马灯的效果
- J2EE中使用jstl报http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar错
- LeetCode 95, 96. Unique Binary Search Trees i. ii