GDB list无法查看代码

2021/07/16 C

本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。

声明:
本博客欢迎转发,但请保留原作者信息!
博客地址: 孟阿龙的博客

GDB list无法查看代码

gdb调试代码,通过list命令可以查看当前文件的代码信息,有时候会遇到不能显示代码的情况:

(gdb) l
1	test.c: No such file or directory.
	in test.c
(gdb)
1	in test.c

如上,显示 No such file … 是因为编译时的源码路径发生变化了。这是因为gdb -g参数在编译时,并不会把源码附加到编译结果中,而是在编译结果中记录了源码的位置。 如果编译完成后,删除了源码或者移动了源码位置,那么就会导致不能显示函数信息。

举例:

test.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	printf("hello world\n");
	return 0;
}

gcc -g -o test test.c

以上,编译完成后,在当前目录下创建一个新的目录,./src, 执行 mv test.c ./src 之后执行 gdb ./test ,通过 list 就会发现无法显示源码 解决方法:mv src/test.c . 即可

附:

以上也可以通过objdump看到段信息来确认,看如下第4~5 行后边显示的 /home/test/data/meng/fs/test 就是我的代码所在的路径

$ gcc -c test.c -o  test.o -g
$ objdump -s test.o
1. Contents of section .debug_str:
2. 0000 6c6f6e67 206c6f6e 6720696e 7400756e  long long int.un
3. 0010 7369676e 65642069 6e74006d 61696e00  signed int.main.
4. 0020 2f686f6d 652f776f 726b2f6f 7062696e  /home/test/data
5. 0030 2f6d656e 67616c6f 6e672f66 732f7465  /meng/fs/test
6. 0040 7374006c 6f6e6720 756e7369 676e6564  st.long unsigned
7. 0050 20696e74 00474e55 20432034 2e342e36   int.GNU C 4.4.6
8. 0060 20323031 32303330 35202852 65642048   20120305 (Red H
9. 0070 61742034 2e342e36 2d342900 6c6f6e67  at 4.4.6-4).long

Search

    Table of Contents