gdb学习笔记

简介:

l(list) [行号|函数名|xx.c:行号] : 列出源码
list :当前行后面的源码
list -: 当前地前面的源码

回车 : 重复上一次命令
b(break) [+|-]{行号|函数名}:  在某行的前或后设置断点,没有参数时在下一条指令处停止
break if ... : 条件暂停 例break if i=1
info break [n] : 查看断点,n为断点号
r(run) : 运行程序
start : 开始调试
n(next) [n] : 相当于step over, 单条语句执行,可以设置条数
step [n] : 相当于step into,可以设置条数
c(continue) : 继续运行程序
u(until) : 退出循环体
p(print) 变量 : 打印变量的值
x 按十六进制格式显示变量。  
d 按十进制格式显示变量。  
u 按十六进制格式显示无符号整型。  
o 按八进制格式显示变量。  
t 按二进制格式显示变量。  
a 按十六进制格式显示变量。  
c 按字符格式显示变量。  
f 按浮点数格式显示变量。
  
print [var] 变量=x : 修改变量值,与gdb内部命令冲突里加var
printf "%s%d...", a, b...  : 格式化打印
display/undisplay 表达式: 自动显示一个变量或表达式
finish : 退出函数
bt(backtrace): 查看函数堆栈
f(frame) n : 栈的第n层
up/down [n]: 上下移动栈
 
q(quit) : 退出gdb
jump [line|file:line]: 跳到某行继续执行 
signal : 产生一个信号
return : 强制函数返回,忽略没有执行的语句
call : 强制调用函数
 
shell : 执行shell命令
make : 等价等shell make
 
forward-search/search/reverse-search: 搜索源码,支持正则
 
///////////////////////////////////////////////
作用域
file::variable  
function::variable
显示数组
p(print) *array@len 
 
////////////////////////////////////
设置观察点(WatchPoint)  
 
观察点一般来观察某个表达式(变量也是一种表达式)的值是
否有变化了,如果有变化,马上停住程序。我们有下面的几种
方法来设置观察点:  
 
watch  
为表达式(变量)expr 设置一个观察点。一量表达式值有变
化时,马上停住程序。  
 
rwatch  
当表达式(变量)expr被读时,停住程序。  
 
awatch  
当表达式(变量)的值被读或被写时,停住程序。  
 
info watchpoints  
列出当前所设置了的所有观察点。  
 
 
////////////////////////////////////
设置捕捉点(CatchPoint)  
 
你可设置捕捉点来补捉程序运行时的一些事件。如:载入共享
库(动态链接库)或是 C++的异常。设置捕捉点的格式为:  
 
catch  
当 event 发生时,停住程序。event可以是下面的内容:  
1、throw 一个 C++抛出的异常。 (throw 为关键字)  
2、catch 一个 C++捕捉到的异常。 (catch 为关键字)  
 
/////////////////////////////////
维护停止点  
 
上面说了如何设置程序的停止点,GDB 中的停止点也就是上述
的三类。在 GDB 中,如果你觉得已定义好的停止点没有用了,
你可以使用 delete、clear、disable、enable 这几个命令来
进行维护。  
 
////////////////////////////
线程(Thread Stops)  
 如果你程序是多线程的话,你可以定义你的断点是否在所有的
线程上,或是在某个特定的线程。GDB 很容易帮你完成这一工
作。  
thread : 切换线程
 
break thread  
break thread if ...  
linespec 指定了断点设置在的源程序的行号。threadno 指定
了线程的 ID,注意, 这个 ID是 GDB 分配的, 你可以通过“info 
threads”命令来查看正在运行程序中的线程信息。如果你不
指定 thread 则表示你的断点设在所有线程上面。你还可以为
某线程指定断点条件。如:  
 
(gdb) break frik.c:13 thread 28 if bartab > lim  
 
当你的程序被 GDB 停住时,所有的运行线程都会被停住。这方
便你你查看运行程序的总体情况。而在你恢复程序运行时,所
有的线程也会被恢复运行。那怕是主进程在被单步调试时。 


本文转自 dogegg250 51CTO博客,原文链接:http://blog.51cto.com/jianshusoft/834649,如需转载请自行联系原作者

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
存储 运维 监控
图数据库介绍及应用场景| 学习笔记
快速学习图数据库介绍及应用场景。
图数据库介绍及应用场景| 学习笔记
|
存储 NoSQL 数据可视化
阿里云图数据库 GDB 介绍及关键能力| 学习笔记
快速学习阿里云图数据库 GDB 介绍及关键能力。
阿里云图数据库 GDB 介绍及关键能力| 学习笔记
|
SQL 分布式计算 DataWorks
GDB 数据导入| 学习笔记
快速学习 GDB 数据导入。
GDB 数据导入| 学习笔记
|
存储 NoSQL 固态存储
GDB 实例购买与初始化配置| 学习笔记
快速学习 GDB 实例购买与初始化配置。
GDB 实例购买与初始化配置| 学习笔记
|
存储 NoSQL 固态存储
GDB 实例备份与恢复| 学习笔记
快速学习 GDB 实例备份与恢复。
GDB 实例备份与恢复| 学习笔记
|
弹性计算 NoSQL Java
链接 GDB 实例| 学习笔记
快速学习链接 GDB 实例。
|
运维 监控 NoSQL
GDB 实例监控与实例运维| 学习笔记
快速学习 GDB 实例监控与实例运维。
|
NoSQL Linux
GDB学习笔记
编译生成执行文件:(Linux下) g++ -std=c++11 -g tst.cpp -o tst   基本操作 $gdb $file 可执行文件名 $start //进入被调用的函数 $s //打印变量的值...
959 0
|
4月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
66 10
|
4月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
112 3