Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C gdbserver中缺少符号名称,但gdb中没有_C_Debugging_Gdb_Gdbserver - Fatal编程技术网

C gdbserver中缺少符号名称,但gdb中没有

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

我想开始使用gdbserver进行远程调试,所以我在本地机器上用一个简单的测试程序测试了它的功能,该程序生成一个segfault,如下所示:

c——编译成名为“test”的elf

现在当我跑步时:

#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的命令提示符的当前目录中,因此它没有要使用的符号副本。将二进制文件添加到运行客户端的终端的路径中解决了这个问题。谢谢

总结:

  • 服务器端:
gdbserver--多端口“可执行文件路径”

  • 客户端:
gdb“可执行文件的路径”
(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 ?? ()