使用GDB调试RB-tree的几个问题(更正)

本文纠正了之前关于GDB调试RB-tree时at后面字符串的错误理解,指出它表示绝对路径。解释了无法step进入无调试信息的函数的原因,并通过objdump和nm命令展示了如何检查目标文件的调试信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博客 http://blog.csdn.net/livelylittlefish 贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正!

Content

1. at后面的一堆字符串代表什么?

2. 为什么没有单步进入(step in)_Rb_tree_insert_and_rebalance函数?

3. 如何通过目标文件.o或者可执行文件得知是否有debugging information

4. 如何单步调试没有debugging information的函数?


0. 引子

 

笔者在前一篇文章使用GDB调试RB-tree的几个问题讨论了几个问题,但关于at后面字符串的讨论是错误,特在此进行更正,希望不要误导读者。并向已经读过该文并被误导或有疑惑的读者致以诚挚的歉意,同时也谢谢这些读者对本blog的支持。

 

一点心得:虽然笔者讨论的问题并不是什么科学,只是简单的技术问题,但也应该本着实事求是的精神,改正自己的错误,对读者负责,实际上也是对自己负责。看来,“科学是严谨的”在技术问题上也是适用的,技术也应该严谨,也应该认真。

 

言归正传,首先更正这个错误。

 

1. at后面的一堆字符串代表什么?

 

at后面的一堆字符串是一个整体,并没有什么前半部分和后半部分。这个整体代表的是一个绝对路径。例如,

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/new

 

其中的..表示当前目录的父目录。

因此,

/usr/lib/gcc/i386-redhat-linux/4.1.2/..表示/usr/lib/gcc/i386-redhat-linux

/usr/lib/gcc/i386-redhat-linux/4.1.2/../..表示/usr/lib/gcc

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../..表示/usr/lib

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../..表示/usr

 

因此,

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/new

就是/usr/include/c++/4.1.2/new,是一个绝对路径。

 

其中,/usr/lib/gcc/i386-redhat-linux/4.1.2是在gcc-4.1.2安装时就确定的。

 

如果同时安装了多个版本的gcc,如下所示。

 

# ls /usr/lib/gcc/i486-linux-gnu

4.4  4.4.0  4.4.1

 

# ls /usr/include/c++

4.4  4.4.0  4.4.1

 

/usr/lib/gcc/i486-linux-gnu/4.4/../../../../include/c++/4.4/new

/usr/lib/gcc/i486-linux-gnu/4.4.0/../../../../include/c++/4.4.0/new

/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../include/c++/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值