Linux调试器-gdb的使用、make、makefile、git工具

1.调试器-gdb

1.2注意

如果要在linux操作系统底下,进行调程序,需要在编译程序的时候,将程序编译为debug版本。
debug:是程序的一个调试版本,增加了一些调试信息,这些调试信息,可以帮助程序员调试代码。
release:是程序的发布版本,客户一般拿到的是这个版本,这个版本相对于debug版本,编译器在编译的时候做了优化,程序运行更快;
Linux 操作系统下,默认在编译的时候生成的是release版本;如果想要生成debug版本,在编译的时候需要增加"-g"命令行参数
在这里插入图片描述

1.3调试的起手式

1.3.1调试可执行程序

   1.gdb [可执行程序的名称]

在这里插入图片描述

2.查看源代码:l(list)

在这里插入图片描述

3.打断点:b [行号](源码文件中的行号)

在这里插入图片描述

  4.  如何删除断点:delete [断点的序号]
  
  5.查看断点信息:i b(info breakpoints)

在这里插入图片描述

6.使断点失效:disable [断点的序号]
断点本质上还是在的,但是程序在执行的时候就不会停留在失效的断点处
7.使断点生效:enable [断点的序号]
8.使程序运行:r(run)

在这里插入图片描述

9.逐过程执行:对标win当中的F10,执行的命令是:n(next)
逐过程不会进入到被调用函数内部执行
在这里插入图片描述

10.逐语句执行:对标win当中的F11,执行的命令是:s(step)
逐语句会进入到被调用函数内部执行
在这里插入图片描述

11.继续执行:c(遇到下一个断点的时候就会停止执行)
12.打印变量的值:p [变量名称]
p [变量名称]:不仅仅局限于普通变量,还可以打印指针变量,还可以打印对象
13.退出:q (quit) 或 ctrl + d
注意:开始执行gdb命令的时候,可以直接回车执行上一次的命令

1.3.2调试coredump文件

1.前提: 本质上是调试程序崩溃之后的内存镜像文件
内存镜像文件保存的是程序在崩溃的一瞬间内存当中的值
在这里插入图片描述

2.Segmentation fault:段错误,内存访问越界,或者访问空指针导致的。
在这里插入图片描述

3.产生cordump文件的条件:
linux操作系统当中需要设置core size的大小。
命令:unlimit -c
在这里插入图片描述

4.磁盘大小并不是无限制,磁盘大小大于镜像文件大小。
例如:core 31351就是内存镜像文件保存的是程序崩溃那一瞬间内存当中的值。
报错:program terminated with signal 11, Segmentation fault.
程序收到了11号信号,产生了段错误,*lp = a ,提示程序员崩溃的代码是哪一行。错误原因,解引用崩溃,有可能解引用了空指针,也有可能引用了野指针。
调试coredump文件:gdb [可执行程序][coredump文件]
在这里插入图片描述

  1. bt查看函数的调用堆栈,查看的时候需要从下往上看
  1. f 堆栈序号 跳转到某一个具体的堆栈

tips:
  11号信号:1.解引用空指针 2.解引用野指针 3. 越界访问内存
  6号信号: double free 重复释放

2.make/makefile

  • make 解释器,自动化解释工具 makefile是一个文件

  • 通过make解释makefile文件,可以构建可执行程序

  • makefile文件的规则:

    • 目标对象:需要生成什么可执行程序或者目标程序(.o)
    • 依赖对象:生成目标对象的时候,依赖的文件。
    • 编译命令:如何使用依赖对象生成目标对象
        
      在这里插入图片描述
  • make解释makefile规则

  • make解释器在解释makefile的时候,会对比依赖对象(源文件)和目标对象(可执行程序)的生成时间
  • 如果目标对象(可执行程序)生成的时间距离现在较近,说明目标对象是最新的,不需要重新编译
    (time - 目标对象的生成时间) < (time - 依赖对象的生成时间)
  • 如果依赖对象(源文件)生成的时间距离现在比较近,说明依赖对象(源码文件)更改过,需要重新编译
    (time - 目标对象的生成时间) > (time - 依赖对象的生成时间)
  • 预定义变量

    • $^:依赖所有对象

    • $@:目标对象

    • gcc $^ -o $@

  • makefile的清理想要删除生成的目标对象

  • makefile当中也可以自定义变量

3.git

  • 克隆仓库

    • git clone “仓库的url”
  • 上传

    • 标记:告诉git工具需要管理那些文件

      • git add [filename]/*
    • 提交到本地仓库

      • git commit -m “提交日志及为什么上传”
    • 推送给远端仓库

      • git push origin master
  • 删除仓库中的内容

    • 本地仓库内容 + 远端仓库内容
    • git rm “文件”
    • git commit -m “提交日志”
    • git push origin master
  • 从远端仓库下载源代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值