zoukankan      html  css  js  c++  java
  • 再学C/C++ 之 浅析gdb的-g选项

    浅析gdb的-g选项


     

    准备

      gdb是Linux下学习C/C++最常用的debug工具。要使用这一强大工具,必须在编译时加上-g选项,生成的目标文件才可以用gdb进行调试。 
    如,先创建一个test.c文件,内容为:

    1 #include <stdio.h>
    2     
    3 int main(void){
    4     int a[2];
    5     a[0] = 1;
    6     a[1] = 2;
    7     return 0;
    8 }

      使用编译语句,进行编译:

    gcc -g test.c -o test.out

    浅析-g选项

      -g选项的作用就是在编译生成的目标文件中加入源码信息。例如,把目标文件中的机器指令与源代码的行数对应起来。注意,这里并不是将整个源码都添嵌入到目标文件中,而是只是添加对应的行数信息,因此,在进行debug的时候,必须保证gdb可以找到源文件。 
      下面做一个小测试进行验证: 
    (1)先针对上面的文件调试:

     
    1 gdb test.out
    2 (gdb) start

    如下:

      可以看到,第一个breakpoint是第5行,且源码为: 
          a[0] = 1;

      这个时候,如果在源文件中的第一和第三行间添加1行,然后再运行gdb(注意,不要在运行gcc编译)

     
    1 gdb test.out
    2 (gdb) start

    此时,发现gdb中第一个breakpoint仍为第5行,但是,源码却为原来的上一行。 


    由此,验证了我们的说法:“gdb只是添加对应的行数信息,而非嵌入源代码”。

     

    扩展

    -g 选项具有三个等级。即:

    -g1 
      不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈存储和函数的调用等等。 
    -g2 
      默认的级别,此时产生的调试信息包括扩展的符号表、行号、局部或外部变量信息 
    -g3 
      包含级别2中的所有调试信息,以及源代码中定义的宏

  • 相关阅读:
    SqlServer触发器的创建与使用
    SqlServer存储过程的创建与使用
    SqlServer视图的创建与使用
    U盘重装系统:手把手教你怎么使用U盘重装系统、清除登录密码
    附034.Kubernetes_v1.21.0高可用部署架构二
    附032.Kubernetes实现蓝绿发布
    CKS考试心得分享
    001.IT运维面试问题-Linux基础
    附031.Kubernetes_v1.20.4高可用部署架构二
    深入Netty逻辑架构,从Reactor线程模型开始
  • 原文地址:https://www.cnblogs.com/scutwang/p/3900319.html
Copyright © 2011-2022 走看看