Linux下gdb调试的基本详情

        老生常谈了,关于linux的gdb的情况,但是呢,我最近在工作中从事工作其中一项就是开发linux下的命令行,大部分的调试工作也是需要依靠gdb的帮助,这次文章就主要讲讲关于gdb的一些使用情况!

1.GCC的全过程

只有了解了c语言编译的全过程,才有可能去真正搞懂gdb的底层原理。

Linux下gdb调试的基本详情_第1张图片

先给大家贴出来gcc的一些编译选项

        

GCC编译选项 说明
-E 预处理指定的源文件,不进行编译
-S 编译指定的源文件,但是不进行汇编
-c 编译、汇编指定的源文件,但是不进行链接
-o [file1] [file2] / [file2] -o [file1] 将文件file2 编译成可执行文件file1
-I  directory 指定include 包含文件的搜索目录
-g 在编译的时候,生成调试信息,该程序可以被调试器调试
-D 在程序编译的时候,指定一个宏
-w 不生成任何警告信息
-Wall 生成所有警告信息
-On n的取值范围:0~3。编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
-l 在程序编译的时候,指定使用的库
-L 指定编译的时候,搜索的库的路径。
-fPIC/fpic 生成与位置无关的代码
-shared 生成共享目标文件,通常用在建立共享库时
-std 指定C方言,如:-std=c99,gcc默认的方言是GNU C
  1. 写好的C语言文件会经过预处理,进行宏替换,注释删减,头文件的添加等一系列操作
  2. 紧接着预处理文件(.i)文件会经过编译,行为汇编文件
  3. 然后汇编文件经过汇编器生成可执行的二进制文件
  4. 最后,进过链接器把所有把可执行的二进制文件还有动态库,静态库链接起来,生成最后的可运行文件(如果想要搞明白在里面的本文不做过多的阐述,可查看程序员的自我修养这本书,专门详细的介绍了这些部分)

2.GDB的常用命令手段(也可应对面试)

        当然我们得先开始从生成可调式的文件说起,需要通过gcc -c -g -o生成可调式文件

1.GDB启动    gdb  调试文件.C

2.查看代码     list(l)   使用方法:list  函数名/行号

3.设置断点     break  使用方法:break 函数名/行号

4.查看设置断点  info break

5.开始执行    

                单步  start(s)   从第一行开始执行

                多不  run         从第一个断点开始执行

6.查看变量  print   变量名

7.查看变量类型 ptype  变量名

8.设置追踪变量(就是对一个变量自动打印,只要有变化值)display 变量名

9. 跳出循环     until

多进程下的调试

1.设置调试父进程还是子进程  set follow-fork-mode  [parent | child]   

2. 设置调试模式       set  detach-on-fork [on | off]  

3.查看调试的进程(这不进行查看的进程可以查出编号的)     info  inferiors   

4.切换进程               infoior   编号

5.是某个进程脱离GDB调试,也就是不关心他的运行  detach inferios id

在企业中一般是如何使用gdb调试

1.一般代码都是10个G,然后代码镶嵌度特别高,所以肯定不能单个文件拎出来进行调试,下面可以通过ps axu |grep  /要调试的文件

 使用git -p  进程号  或者   git  att   进程号都可以进行追踪。

你可能感兴趣的:(linux,linux,gdb)