【Linux学习笔记八】Linux编程-编译(gcc)与调试(gdb)
来源:互联网 发布:寻路算法之a star 编辑:程序博客网 时间:2024/05/16 19:53
【注】文章中的所有截图均为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命令缩写描述helph获取帮助信息listl显示源代码search
向前(朝向文件尾)搜索源代码reverse-search
向后(朝向文件头)搜索源代码breakb设置断点info break
查看断点信息clear
清除当前所在行的断点runr从头运行程序至第一个断点nextn单步执行(不进入函数体)steps单步执行(进入函数体)continuec从当前行继续运行程序至下一个断点printp打印变量的值watch
设置观察点set var variable=value
设置变量variable的值为valuebt
查看运行时栈quitq退出gdb
向前(朝向文件尾)搜索源代码reverse-search
向后(朝向文件头)搜索源代码breakb设置断点info break
查看断点信息clear
清除当前所在行的断点runr从头运行程序至第一个断点nextn单步执行(不进入函数体)steps单步执行(进入函数体)continuec从当前行继续运行程序至下一个断点printp打印变量的值watch
设置观察点set var variable=value
设置变量variable的值为valuebt
查看运行时栈quitq退出gdb
1 0
- 【Linux学习笔记八】Linux编程-编译(gcc)与调试(gdb)
- Linux编程-编译(gcc)与调试(gdb)
- Linux GCC与GDB调试
- Linux GCC与GDB调试
- linux-编译gcc调试gdb与安装make与core
- Linux学习(十二):gcc编译和gdb调试
- Linux 下 C 编译gcc与调试gdb工具介绍
- 嵌入式学习笔记---GCC编程与gdb调试
- Linux gcc gdb 编译调试程序
- linux笔记(gcc及gdb调试)
- linux编程--gdb调试学习
- gcc编译与gdb调试
- Linux笔记--gcc与gdb总结
- linux gcc编译extern变量 用gdb调试的问题
- Linux下编译调试C程序(GCC,GDB)
- Linux下的简单C程序gcc编译、gdb调试。
- GCC编译选项与GDB调试学习总结
- linux编程器GCC及调试器GDB
- 爬楼梯问题
- ceph和hdfs
- 路由的几个基本概念-直连路由/网关路由/主机路由/网络路由/动态路由/静态路由/默认路由
- Android自定义View之自定义复合控件--标题栏
- 把一个List集合有规律的插入另一个List集合中
- 【Linux学习笔记八】Linux编程-编译(gcc)与调试(gdb)
- Flowplayer基于视频流的免费web视频播放器
- 自定义View显示超大图片
- UID卡修改&UID锁死修复
- Android性能专项测试测试点指导(二)
- Android.mk的使用
- 项目生成出现问题:error LNK2019: 无法解析的外部符号 __imp___vsnprintf
- Filter
- POJ3728 LCA RMQ 动态规划