C gdbserver中缺少符号名称,但gdb中没有
我想开始使用gdbserver进行远程调试,所以我在本地机器上用一个简单的测试程序测试了它的功能,该程序生成一个segfault,如下所示: c——编译成名为“test”的elf 现在当我跑步时:C gdbserver中缺少符号名称,但gdb中没有,c,debugging,gdb,gdbserver,C,Debugging,Gdb,Gdbserver,我想开始使用gdbserver进行远程调试,所以我在本地机器上用一个简单的测试程序测试了它的功能,该程序生成一个segfault,如下所示: c——编译成名为“test”的elf 现在当我跑步时: #gdb测试 (gdb)运行 我得到: Starting program: /home/awaibel/digiworkspace/test/Debug/test Program received signal SIGSEGV, Segmentation fault. 0x080483bf in
#gdb测试
(gdb)运行
我得到:
Starting program: /home/awaibel/digiworkspace/test/Debug/test
Program received signal SIGSEGV, Segmentation fault.
0x080483bf in main () at ../segfault.c:4
4 int value = *((int*)NULL);
但是,如果我像这样使用gdb服务器调试它:
#gdbserver:65535测试
#gdb测试
(gdb)目标远程127.0.0.1:65535
(gdb)继续
它为我提供了调试信息:
Program received signal SIGSEGV, Segmentation fault.
0x080483bf in ?? ()
它似乎为segfault提供了相同的函数地址,但在使用远程调试器进行调试时忽略了名称和行号。是否可以让远程调试器显示此信息,如果可以,如何显示
我想我应该补充一点,这个程序是用GCC编译的,使用“-g”debug标志多亏了markys的评论,我才能够解决这个问题。由于解析符号的是gdb客户机,而不是服务器,因此我必须确保客户机知道可执行文件副本的完整路径。由于“test”不在用于运行gdbtest的命令提示符的当前目录中,因此它没有要使用的符号副本。将二进制文件添加到运行客户端的终端的路径中解决了这个问题。谢谢 总结:
- 服务器端:
- 客户端:
(gdb)>目标远程“远程设备的ip:端口”当我重复您的步骤时,即使使用gdbserver(segfault.c:4的main()中的0x00000000004047b),我也会得到预期的结果。您使用的是什么平台(操作系统和体系结构)和GDB版本?GDB——版本给出了GNU GDB(Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1)7.4-2012.04gdbserver——版本给出了GNU gdbserver(Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1)7.4-2012.04平台是Xubuntu 12.04 x86,类似符号的书没有加载。我必须向gdbserver调用添加一些东西来加载符号吗?是“客户端”的gdb进行符号解析。gdbserver只知道地址。当您使用“gdb测试”启动gdb时,您应该会看到类似“从测试中读取符号…完成”这样的行。你看到了吗?
Program received signal SIGSEGV, Segmentation fault.
0x080483bf in ?? ()