Linux:gdb调试

本文详细介绍了如何使用GCC生成发行版本和开发版本的C程序,包括一步生成和分步生成的方法,并讲解了readelf工具查看section header信息。接着,重点阐述了GDB调试工具的使用,包括设置断点、调试过程中的各种命令以及查看变量和表达式的值。此外,还展示了如何查看函数调用栈以理解程序执行流程。
摘要由CSDN通过智能技术生成


1 发行版本和开发版本

1.1 生成命令

  • 一步生成
gcc -o main main.c  #生成release版本
gcc -o debug main.c -g  #生成debug版本
  • 分步生成
    • 编译期加入debug
    • 后续直接继续生成
gcc -c main.c -g  #编译期加入debug

gcc -o main main.o  #继续生成
  • 显示section header信息
  • 开发版本多了 debug_* 段
readelf -S main
readelf -S debug

2 gdb调试

2.1 下断点

gdb debug

l  #默认显示main函数所在文件的源代码
list file_name:num  #显示file_name文件num行附近的源代码

b line_num  #num行加断点
b function_name  #指定函数加断点
b file_name:line_num  #给file_name文件num行加断点
b line_num if 条件  #条件断点

info b  #显示断点信息

d bpnum  #删除断点
disable bpnum  #断点无效
enable bpnum  #断点生效

2.2 调试过程命令

r  #启动调试

n  #执行下一步

s  #进入函数内部

finish  #退出函数

c  #继续运行到下一个断点

q  #退出调试

2.3 查看命令

p val_name  #查看变量的值
p &val_name  #查看变量的地址
p *ptr  #查看指针指向地址存储的值
p arr  #查看数组中的所有元素
p *ptr@num  #查看ptr数组中的num个元素
p struct_val  #查看结构体变量中所有成员的值
p struct_val.a  #查看结构体变量中某个成员的值
p struct_ptr->a  #查看指针指向的结构体变量中某个成员的值
p function_name(a,b)  #查看函数通过给定参数运行的结果

bt  #查看函数调用栈(函数调用流程)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值