GDB常用调试命令(一)
GDB是UNIX及UNIX-like下的调试工具,通常gdb使用前置条件:编译时加入debug信息,这里指的是C++。
gcc/g++调试选项
gcc/g++是在编译时加入-g,-g分4个等级:
- -g0等于不加-g;即不包含任何信息
- -g1只包含最小信息,一般来说只有你不需要debug,只需要backtrace信息,并且真的很在意程序大小,或者有其他保密/特殊需求时才会使用-g1
- –g2为gdb默认等级,包含绝大多数你需要的信息
- –g3包含一些额外信息,例如包含宏定义信息
关于gcc/g++优化级别,总结如下:
gcc/g++ -O选项,gcc编译C,g++编译C++,-O分4个等级:
- -O0编译不优化,如果指定了多个-o选项,不管带不带数字,最后一个选项才是生效的选项
- -O1是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的,但一般这些任务肯定能顺利完成
- -O2是推荐的优化等级,除非你有特殊的需求。-O2会比-O1启用多一些标记。设置了-O2后,编译器会试图提高代码性能而不会增大体积和大量占用的编译时间
- -O3是最高最危险的优化等级。用这个选项会延长编译代码的时间,并且在使用gcc4.x的系统里不应全局启用。自从3.x版本以来gcc的行为已经有了极大地改变。在3.x,-O3生成的代码也只是比-O2快一点点而已,而gcc4.x中还未必更快。用-O3来编译所有的软件包将产生更大体积更耗内存的二进制文件,大大增加编译失败的机会或不可预知的程序行为(包括错误)。这样做将得不偿失,记住过犹不及。在gcc 4.x.中使用-O3是不推荐的
- -Os这个等级用来优化代码尺寸。其中启用了-O2中不会增加磁盘空间占用的代码生成选项。这对于磁盘空间极其紧张或者CPU缓存较小的机器非常有用。但也可能产生些许问题,因此软件树中的大部分ebuild都过滤掉这个等级的优化。使用-Os是不推荐的
GDB常用操作
- 调试程序,gdb启动程序
1.gdb 程序名,进入gdb后,使用run/r命令运行gdb调试,如果程序需要传递参数,run后面加[arg];
2.如果程序需要传递参数,gdb --args 程序名 [arg],进入gdb后,使用run/r;
3. 进入gdb后,输入程序名;如果需要给程序传递参数,使用set args ["input"] 设定程序参数,再运行run/r,启动程序;
- 调试正在运行的程序
gdb attach [pid]
- 查看源码
list:list(l) [函数名][行数],查看源码,简写l
- 断点设置及管理
break/b line_number :
在line_number行上打断点,使程序在line_number行执行前停止
break/b [filename]function_name:
在filename文件下的function_name函数入口停止
break/b [filename]line_number:
在filename文件下的line_number行打断点
break/b +offset/-offset :
在当前行号的前面或后面offset停止
break/b where if condition :
当某个条件满足时,在某一行停止; eg:在循环体中可以设置break ... if i = 100 来设置循环次数
break/b :
没有参数在下一行停止
break/b [内存地址] :
在程序的运行地址处停止
info break:
显示当前的断点信息
delete/d breakpoint_id:
关闭断点
disable/enable breakpoint_id:
禁用/使能断点,该命令将禁止、允许断点 1,同时断点信息的 (Enb)域将变为 n、y
- 运行命令
run/r [args] :run命令可以直接接命令行参数值
set args ["input"]: 修改发送给程序的参数(进入GDB后才能使用)
show args:查看其缺省参数的列表(进入GDB后才能使用)
- 单步命令
next/n : 不进入的单步执行
step/s : 进入的额单步执行
finish : 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值以及参数信息
until :退出当前的循环体
- 查看信息
1.查看数据:
print variable : 查看变量
print *array@len :查看数组(array是数组指针,len是需要数据长度)
可以通过添加参数来设置输出格式:
/x 按十六进制格式显示变量
/d 按十进制格式显示变量
/u 按十六进制格式显示无符号整型
/o 按八进制格式显示变量
/t 按二进制格式显示变量
/a 按十六进制格式显示变量
/c 按字符格式显示变量
/f 按浮点数格式显示变量
2.查看内存:
examine /n f u + 内存地址(指针变量)
n 表示显示内存长度
f 表示输出格式(见上)
u 表示字节数制定(b 单字节;h 双字节;w 四字节;g 八字节;默认为四字节)
如:
x /10cw pFilePath (pFilePath为一个字符串指针,指针占4字节)
x 为examine命令的简写。
3.查看栈信息:
backtrace [-n][n],简写bt
n 表示只打印栈顶上n层的栈信息
-n 表示只打印栈底上n层的栈信息
不加参数,表示打印所有栈信息
- 搜索:
search text:该命令可显示在当前文件中包含text串的下一行
reverse-search text:该命令可以显示包含text 的前一行
- 函数调用:
call function:强制调用某函数,它会显示函数返回值(如果函数返回值不是void类型)
- 调试进程:
gdb attach pid:调试已运行的进程,pid为进程号
- 别的命令:
cd :改变当前工作目录
clear:删除刚才停止处的断点
commands :命中断点时,列出将要执行的命令
display :程序停止时显示变量和表达时
up :上移栈帧,使另一函数成为当前函数
down :下移栈帧,使得另一个函数成为当前函数
frame :选择下一条continue命令的帧
jump :在源程序中的另一点开始运行
kill :异常终止在gdb 控制下运行的程序
pwd :显示当前工作目录
ptype :显示一个数据结构(如一个结构或C++类)的内容
quit :退出gdb
set variable ["args"] = "value":给变量赋值,变量为args,value为设定值
signal :将一个信号发送到正在运行的进程
undisplay display :命令的反命令,不要显示表达式
watch :在程序中设置一个监测点(即数据断点)
whatis :显示变量或函数类型
未完待续...
转载于:https://www.cnblogs.com/coder-zyc/p/9595691.html
GDB常用调试命令(一)相关推荐
- Linux+gcc设置断点,gcc/g++常用编译选项和gdb常用调试命令
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? gcc/g++编译器是我们写编译C/C++程序时离不开的编译工具,而gdb又是调试C/C++程序的利器,这一篇文章我们记 ...
- GDB常用调试命令以及多进程多线程调试
今天把所有的GDB常用的调试命令都过了一遍,尤其是多线程调试.所以先做个总结,以免忘记.以后如果有新的有用的命令会继续追加. 本文地址:(LYanger的博客:http://blog.csdn.net ...
- gdb常用调试命令汇总!
在debug模式下,使用GDB进行调试,可以使用的命令汇总如下: (gdb) p *(*pHead)->next 这里声明语句ListNode** pHead,表示查看*pHead执行链表节 ...
- Linux(gcc编译原理、过程以及常用调试命令)
PS:红色字体表示重点,绿色字体表示重要标题,块引用中表示Linux终端中的命令. 1.gcc / g++的安装 命令:sudo apt install gcc /gcc+ 2.gcc编译连接 //m ...
- Bochs常用调试命令
Bochs常用调试命令 Bochs是非常好用的模拟器,命令也很多,不过最常用的其实总结起来也就包括几条,记住这些命令基本都可以满足调试需求了. 1. 断点操作 (1)设置断点:b 物理地址 例:b 0 ...
- Rockchip Android平台常用调试命令汇总
Rockchip Android平台常用调试命令汇总 文章目录 Rockchip Android平台常用调试命令汇总 查看帧率信息 查看显示图层信息 手动触发内核产生panic 通过命令设置Andro ...
- vxworks常用调试命令
总结的vxworks常用调试命令,学习vxworks这些东西是必须的. 1.与任务相关的命令 sp, [arg1], ..., [arg9] -启动任务,最多接受9个参数,默认的优先级100 ...
- gdb 跟踪调试命令整理
内容源自于陈浩CSDN博客的用GDB调试程序一系列文章 用GDB调试程序(一) 用GDB调试程序(二) 用GDB调试程序(三) 用GDB调试程序(四) 用GDB调试程序(五) 用GDB调试程序(六) ...
- linux之gdb基本调试命令和使用总结
1.gdb调试命令 描述 backtrace(或bt) 查看各级函数调用及参数 finish 连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧编号 选择栈帧 info(或i) ...
- Linux之gdb基本调试命令与总结
一.常见gdb调试命令 表1 gdb基本调试指令 命令 描述 backtrace(或bt) 查看各级函数调用及参数 finish 连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧 ...
最新文章
- [转载]IPMSG(飞鸽传书)协议翻译
- TOJ4537: n阶行列式
- qpython3安装kivy_kivy库的安装
- 如何系统地理解「交易平台」?
- Java中的24种设计模式与7大原则
- WUSTOJ 1299: 结点选择(Java)
- 常用文献管理软件使用经验
- C++第10周项目2扩展之2参考——迭代求和
- idea2020.2.2怎么创建web项目_创建Vue3.0的项目
- php如何增加字段,php如何增加字段
- java string的内存模型_Java String内存模型
- 数据库系统概论-关系数据库
- 坐标系投影转换CGCS2000坐标系(国家2000坐标系)等高线地形图
- android 电池权限,Android M及以上提示用户将APP加入电池优化白名单
- 实战!双硬盘安装图解!
- 调查报告:创意行业是否为远程办公做好准备?
- matlab实现正弦内插算法(低通滤波)
- 巴西龟饲养日志----肺炎治疗情况
- 35-文思海辉公司问题-info
- 【ASP.NET】System.Threading.ThreadAbortException中第一次偶然出现的“mscorlib.dll”类型的异常