gdb single stepping until exit from function *, which has no line number information解决办法

编程入门 行业动态 更新时间:2024-10-25 22:27:28

前提:编译程序使用的4.7.2版本的gcc,同时编译的时候也使用了-g3的参数。如果不了解-g3的含义,可以参见:https://gcc.gnu/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

gdb的其他操作

1、编译程序的时候加入-g参数,这样编译的时候加入一些额外的信息,这样在debug的时候能匹配到源码的某一行

2、最好不用用编译器的-O或者-O2编译,可能更改代码的执行顺序

3、如果在gdb中执行shell命令,可以用 ! comand或者 shell command执行

4、可以利用TAB进行命令补全

 

利用gdb单步执行理解刚接手的程序的时候,提示下图中的错误:

查了很多的资料,找了很多的解决办法

1、更改gdb7.2版本到gdb7.8; 

2、编译的时候加入-gdwarf-2等编译选项。

都不能解决问题。

 

后来认真看了编译程序的BUILD文件,发现程序加入了-fvisibility=hidden以及-Wl,-Bsymbolic这些链接选项。

恍然大悟。加入-fvisibility=hidden这个选项导致不能看到行号等信息。

 

那当初编译程序的人为什么加入“-fvisibility=hidden”或者“-Wl,-Bsymbolic”这些链接选项呢?

主要是想解决多个共享库符号表冲突的问题。每个共享库用自己库中的符号表。

具体含义也可以参见:

https://stackoverflow/questions/6538501/linking-two-shared-libraries-with-some-of-the-same-symbols/6540059#6540059

另外,对于编写c++程序,要养成好的编程习惯,加入命名空间,减少符号冲突的可能。

更多推荐

gdb single stepping until exit from function *, which has no line number informa

本文发布于:2023-06-14 03:42:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1433994.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:解决办法   stepping   exit   gdb   single

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!