gpt4 book ai didi

c - gdbserver 中缺少符号名称但 gdb 中没有

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:33 25 4
gpt4 key购买 nike

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

segfault.c -- 编译成名为“test”的 Sprite

#define NULL ((void*)0)
int main()
{
int value = *((int*)NULL);
return value;
}

现在当我运行时:

#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 ?? ()

它似乎为段错误提供了相同的函数地址,但是在使用远程调试器进行调试时省略了名称和行号。是否可以让远程调试器显示此信息,如果可以,如何显示?

我想我应该补充一点,该程序是使用“-g”调试标志使用 GCC 编译的

最佳答案

多亏了 markys 的评论,我才得以找出问题所在。由于 gdb 客户端负责解析符号而不是服务器,因此我必须确保客户端知道可执行文件副本的完整路径。由于“test”不在用于运行 gdbtest 的命令提示符的当前目录中,因此它没有要使用的符号副本。为运行客户端的终端将二进制文件添加到 PATH 解决了这个问题。谢谢。

总结:

  • 服务器端:

gdbserver --multi :port "path-to-executable"

  • 客户端:

gdb“可执行文件路径”(gdb)> 目标远程“ip-of-the-remote-device:port”

关于c - gdbserver 中缺少符号名称但 gdb 中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19687230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com