
Linux-调试器gdb-make/makefile-git工具
发布日期:2021-05-04 18:21:47
浏览次数:10
分类:技术文章
本文共 2148 字,大约阅读时间需要 7 分钟。
文章目录
调试器gdb
-
注意,如果要在linux操作系统底下,进行调程序需要把文件调成debug版中。debug中有一些调试信息,而release是发布版本,在这个版本中运行更快,并且最终debug版本比release版本大,因为debug里面有调试信息。Linux操作系统底下默认在编译的时候生成的是release版本,如果在Linux想要生成一个debug版本需要增加“-g”命令行参数。
命令:gcc test.c -o bb -g -
调试的起手式
调试可执行程序命令: gdb可执行程序名称
查看源代码: l(list)
打断点: b(breakpoint) 行号(源码文件中的行号)
去除断点: delete 断点的序号
查看断点信息: i b (info breakpoint)
注意:因为之前先打了一个断点,之后又把那个断点删除了,所以断点序号是从2开始的,在linux中断点序号即使被删除,也会算是一个编号。 使断点失效: disable 断点的序号
使断点生效: enable 断点的序号
使程序跑起来: run
如何逐语句执行,对标到window当中是F11,执行的命令是:s(step),逐过程执行,window中是F10,执行的命令是:n(next)。逐语句执行进函数,逐过程执行不进函数。 继续执行: c(countinue)直到遇到下一个断点的时候停止。
注意: 当开始执行gdb命令的时候,可以直接回车,执行上一次的命令。 打印变量的值: p(print) p 变量名称 p 对象 p 指针
退出: q(quit)
调试coredump文件
前提: 本质上是调试程序崩溃之后的内存镜像文件。
Segmentation fault:段错误,内存访问越界,或者访问空指针导致的。产生cordump文件的条件:
-
linux操作系统当中需要设置core size的大小。
命令:unlimit -c -
磁盘大小并不是无限制,磁盘大小大于镜像文件大小。
例如:core 31351就是内存镜像文件保存的是程序崩溃那一瞬间内存当中的值。
报错:program terminated with signal 11, Segmentation fault.
程序收到了11号信号,产生了段错误,*lp = a ,提示程序员崩溃的代码是哪一行。错误原因,解引用崩溃,有可能解引用了空指针,也有可能引用了野指针。 例如:char * lp (char *)malloc(1024)strcpy(lp,"aaa");free(lp)*lp = 'a'
bt查看函数的调用堆栈,查看的时候需要从下往上看
f 堆栈序号 跳转到某一个具体的堆栈tips:
11号信号:1.解引用空指针 2.解引用野指针 3. 越界访问内存 6号信号: double free 重复释放make&makefile
- make 解释器,自动化解释工具 makefile是一个文件
- 通过make解释makefile文件,可以构建可执行程序
- makefile文件的规则: 目标对象:需要生成什么可执行程序或者目标程序(.o) 依赖对象:生成目标对象的时候,依赖的文件。 编译命令:如何使用依赖对象生成目标对象 vim makefile bb:test.c gcc test.c -o bb make 会自动选取当前文件夹下的makefile文件
- make解释makefile规则 make解释器在解释makefile的时候,会比较依赖对象(源文件)和目标文件(可执行程序)的生成时间。如果目标对象(可执行程序)生成的时间距离现在较近,说明依赖对象(源码文件更改过,需重新编译) 只为生成第一个目标对象而服务 make解释器在解释makefile的时候,为了生成第一个目标对象,也会判断第一个目标对象依赖的对象是否存在,如果不在,则在makefile后续的语句当中查找生成依赖对象的方法。先将依赖对象生成,再使用依赖对象将第一个目标对象生成。
- 预定义变量 $^:依赖所有对象 $@:目标对象 gcc $^ -o $@
- makefile的清理想要删除生成的目标对象
- makefile当中也可以自定义变量 vim makefile CFLAGS = -g BIN1 = main BIN2 = bb all: $ (BIN1) $ (BIN2) $ :相当于c中的解引用
git版本管理工具
分布式管理
svn 集中式管理- 克隆仓库 git clone “url”
- 上传 (1)标记 git add [filename] 告诉git工具需要管理哪些文件 (2)提交到本地仓库 git commit -m “提交日志” (3)推送给远端仓库 git push origin master
- 删除仓库当中的内容 本地仓库的内容 + 远端仓库的内容 git rm “文件” git commit -m “xx” git push origin master
- 从远端仓库下载源代码 git pull
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月02日 14时40分58秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
RPA实施指南:企业如何实现流程优化?
2019-03-01
干货丨RPA售前六技能
2019-03-01
伪类的用法
2019-03-01
MVC之修改
2019-03-01
堆栈和队列
2019-03-01
使用pycharm链接数据库MySQL
2019-03-01
Linux基础学习笔记
2019-03-01
struct 模块
2019-03-01
析构方法 __del__
2019-03-01
python之random模块
2019-03-01
python之面向对象编程
2019-03-01
Docker Compose 搭建 Redis Cluster 集群环境
2019-03-01
python之集合类型内置方法
2019-03-01
编程与编程语言分类
2019-03-01
python之三元表达式、生成式、生成器表达式
2019-03-01
python之pickle模块
2019-03-01
【高速接口-RapidIO】5、Xilinx RapidIO核例子工程源码分析
2019-03-01
设计模式(二)—工厂模式(简单工厂模式)(附代码)
2019-03-01
视觉SLAML1作业
2019-03-01
【转载】常见HTTP状态码
2019-03-01