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++/