Linux编程-编译(gcc)与调试(gdb)

注】文章中的所有截图均为centos下实验结果,亲测命令正确= ̄ω ̄=

【参考资料】《Linux从入门到精通(第2版)》刘忆智 等编著


1、编译一个C程序 :以用vim写成的summary.c为例


     $ gcc summary.c            ##编译文件,生成名为 a.out 的可执行文件
     $ ./a.out            ##执行文件
     gcc -o sum summary.c            ##为编译生成的可执行文件命名为sum
     $ ./sum            ##为编译生成的可执行文件命名为sum

【转载请注明文章出处:http://blog.csdn.net/iamthezbl/article/details/51346603

2、同编译有关的选项
选项 功能
-c 只激活预处理、编译和汇编,生成扩展名为.o的目标代码文件(编写大型程序所必须)
-S 只激活预处理和编译,生成扩展名.s的汇编代码文件
-E 只激活预处理,并将结果输出至标准输出
-g 为调试程序(如gdb)生成相关信息
     $ gcc -E summary.c > pre_sum            ##将结果重定向输出到文件中
3、编译C++程序:g++
     $ g++ -o hello hello.cpp            ##与gcc用法基本一致
4、启动调试(gdb)
     $ gcc -g summary.c            ##在调试之前,必须先用gcc -g命令生成带有调试信息的可执行程序
     $ gdb a.out            ##对二进制文件a.out进行调试,提示符(gdb)等待接受用户的指令


5、获得帮助:gdb支持<Tab>的命令补全,和两个<Tab>的命令列表(前边提到过Shell的同样功能),也支持缩写,如help可以用h代替
     (gdb) help            ##显示gdb的帮助信息
     (gdb) help breakpoints            ##进一步获取和断点有关的帮助信息

【转载请注明文章出处:http://blog.csdn.net/iamthezbl/article/details/51346603

6、查看源代码
     (gdb) list            ##查看程序源代码,每次显示十行,回车继续显示,list可以简写成 l
     (gdb) l 15            ##显示第 15 行附近的 10 行代码
     (gdb) search int summary            ##查找对应内容,回车继续查找下一个(朝向文件尾)
     (gdb) reverse-search Summary            ##向相反方向搜索(朝向文件头)
     search和reverse-search支持使用正则表达式搜索。







7、设置断点
     (gdb) break 10            ##在第10行设置断点
     (gdb) break summary            ##在summary()函数入口处设置断点
     (gdb) info break            ##查看已经设置的断点信息
     (gdb) clear 10            ##删除该行断点




8、运行程序和单步执行
     如果CentOS不能正常运行如下命令,需要先进行如下配置:
     $ cd/etc/yum.repos.d  
     $ sudo vim  CentOS-Debuginfo.repo            ##文件为只读,需要用sudo打开修改
     将enabled=0修改为enabled=1,保存退出。


     $ sudo yum install yum-utils           
     $ sudo yum install nss-softokn-debuginfo --nogpgcheck
     $ sudo yum install glibc           
     需要在ipv4下下载安装。
     $ sudo debuginfo-install glibc-2.17-106.el7_2.4.x86_64            ##具体的版本号可以根据gdb下使用run命令失败时的系统提示确定,此处如果不能完全安装成功,可以使用以下两条语句更新后再次安装,便可以成功: 
     $ sudo yum makecache           
     $ sudo yum update    
     上述步骤安装完成后,便可以正常使用调试命令了。如,在summary.c中第十行设置断点后:
     (gdb)run            ##缩写为 r,运行程序至断点
     (gdb)next            ##缩写为 n,单步执行,不进入函数内部
     (gdb)n 2            ##提供一个数字,连续执行 2 行
     (gdb)continue            ##缩写为c,运行程序到下一个断点


     (gdb)step            ##缩写为s,单步执行,进入函数内部


【转载请注明文章出处:http://blog.csdn.net/iamthezbl/article/details/51346603


9、监视变量
     如果CentOS不能正常运行如下命令,需要先进行如下配置:
     (gdb) print sum            ##缩写为p,打印变量sum的值
     (gdb)            ##重复上一条命令
     (gdb) watch sum           ##每次使用print比较麻烦,可以用watch设置观察点,每次sum发生变化,程序就会停下


10、临时修改变量
     程序运行时修改变量的值:
     (gdb) set var i = 1            ##将变量 i 的值修改为1


11、查看堆栈情况:bt


12、退出gdb
     (gdb) quit           ##缩写为q,如果程序没有运行完毕,会要求用户确认

【转载请注明文章出处:http://blog.csdn.net/iamthezbl/article/details/51346603

13、常用gdb命令汇总
gdb命令 缩写 描述
help h 获取帮助信息
list l 显示源代码
search
向前(朝向文件尾)搜索源代码
reverse-search
向后(朝向文件头)搜索源代码
break b 设置断点
info break
查看断点信息
clear
清除当前所在行的断点
run r 从头运行程序至第一个断点
next n 单步执行(不进入函数体)
step s 单步执行(进入函数体)
continue c 从当前行继续运行程序至下一个断点
print p 打印变量的值
watch
设置观察点
set var variable=value
设置变量variable的值为value
bt
查看运行时栈
quit q 退出gdb
1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值