再学C/C++ 之 浅析gdb的-g选项
发布日期:2021-08-17 00:51:58 浏览次数:8 分类:技术文章

本文共 862 字,大约阅读时间需要 2 分钟。

浅析gdb的-g选项


 

准备

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

如,先创建一个test.c文件,内容为:

1 #include 
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.out2 (gdb) start

如下:

  可以看到,第一个breakpoint是第5行,且源码为: 

      a[0] = 1;

 

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

 
1 gdb test.out2 (gdb) start

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

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

 

扩展

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

-g1 

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

 

转载于:https://www.cnblogs.com/scutwang/p/3900319.html

转载地址:https://blog.csdn.net/weixin_30825199/article/details/99163372 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:oracle12c ORA-28040: No matching authentication protocol
下一篇:ECharts.js学习(二)动态数据绑定

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月07日 14时03分45秒