Linux-调试器gdb-make/makefile-git工具

调试器gdb

  1. 注意,如果要在linux操作系统底下,进行调程序需要把文件调成debug版中。debug中有一些调试信息,而release是发布版本,在这个版本中运行更快,并且最终debug版本比release版本大,因为debug里面有调试信息。Linux操作系统底下默认在编译的时候生成的是release版本,如果在Linux想要生成一个debug版本需要增加“-g”命令行参数。
    命令:gcc test.c -o bb -g
    在这里插入图片描述

  2. 调试的起手式
    调试可执行程序

    命令: 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文件的条件:

  3. linux操作系统当中需要设置core size的大小。
    命令:unlimit -c

  4. 磁盘大小并不是无限制,磁盘大小大于镜像文件大小。
    例如: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

  1. make 解释器,自动化解释工具 makefile是一个文件
  2. 通过make解释makefile文件,可以构建可执行程序
  3. makefile文件的规则:
    目标对象:需要生成什么可执行程序或者目标程序(.o)
    依赖对象:生成目标对象的时候,依赖的文件。
    编译命令:如何使用依赖对象生成目标对象
      vim makefile
      bb:test.c
      gcc test.c -o bb
      make 会自动选取当前文件夹下的makefile文件
  4. make解释makefile规则
      make解释器在解释makefile的时候,会比较依赖对象(源文件)和目标文件(可执行程序)的生成时间。如果目标对象(可执行程序)生成的时间距离现在较近,说明依赖对象(源码文件更改过,需重新编译)
      只为生成第一个目标对象而服务
      make解释器在解释makefile的时候,为了生成第一个目标对象,也会判断第一个目标对象依赖的对象是否存在,如果不在,则在makefile后续的语句当中查找生成依赖对象的方法。先将依赖对象生成,再使用依赖对象将第一个目标对象生成。
  5. 预定义变量
       $^:依赖所有对象
       $@:目标对象
      gcc $^ -o $@
  6. makefile的清理想要删除生成的目标对象
  7. makefile当中也可以自定义变量
      vim makefile
      CFLAGS = -g
      BIN1 = main
      BIN2 = bb
      all: $ (BIN1) $ (BIN2)
      $ :相当于c中的解引用

git版本管理工具

  分布式管理
svn
  集中式管理

  1. 克隆仓库
    git clone “url”
  2. 上传
    (1)标记 git add [filename]
      告诉git工具需要管理哪些文件
    (2)提交到本地仓库 git commit -m “提交日志”
    (3)推送给远端仓库 git push origin master
  3. 删除仓库当中的内容
      本地仓库的内容 + 远端仓库的内容
      git rm “文件”
      git commit -m “xx”
      git push origin master
  4. 从远端仓库下载源代码
      git pull

猜你喜欢

转载自blog.csdn.net/weixin_43580319/article/details/114417397