首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在gdbserver中缺少符号名,但在gdb中没有。

在gdbserver中缺少符号名,但在gdb中没有。
EN

Stack Overflow用户
提问于 2013-10-30 15:36:13
回答 1查看 1.6K关注 0票数 1

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

分段错误.c-编译成精灵名为"test“

代码语言:javascript
复制
#define NULL ((void*)0)
int main()
{
    int value = *((int*)NULL);
    return value;
}

现在当我跑:

#gdb test

(gdb)run

我得到:

代码语言:javascript
复制
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 test

#gdb test

(gdb)target remote 127.0.0.1:65535

(gdb)continue

它提供了调试信息:

代码语言:javascript
复制
Program received signal SIGSEGV, Segmentation fault.
0x080483bf in ?? ()

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

我想我应该补充一点,这个程序是使用"-g“调试标志与GCC一起编译的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-30 18:24:40

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

总结:

  • 服务器端:

gdbserver --多端口“路径到可执行文件”

  • 客户端:

gdb“路径到可执行文件”(gdb)>目标远程“ip-of-远程设备:端口”

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19687230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档