首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是段故障rip/rsp编号以及如何使用它们

什么是段故障rip/rsp编号以及如何使用它们
EN

Stack Overflow用户
提问于 2009-09-21 21:11:48
回答 2查看 33.9K关注 0票数 11

当我的linux应用程序崩溃时,它会在日志中生成类似以下内容的一行:

0000000的段错误rip 00003f32a823 rsp 000123ade323错误4

这些rip和rsp地址是什么?我如何使用它们来定位问题呢?它们是否对应于"objdump“或"readelf”输出中的内容?如果我的程序将其符号剥离出来(放到一个单独的文件中,该文件可以通过gdb使用),它们是否有用?

EN

回答 2

Stack Overflow用户

发布于 2009-09-21 21:20:37

rip指针告诉你导致崩溃的指令。您需要在地图文件中查找它。

在映射文件中,您将拥有函数及其起始地址的列表。当您加载应用程序时,它被加载到一个基地址。rip指针-基地址为您提供映射文件地址。然后,如果您在映射文件中搜索一个函数,该函数的起始地址略低于您的rip指针,并且在列表中,后面是一个地址更高的函数,则您已经找到了崩溃的函数。

然后,您需要尝试找出代码中的错误所在。这并不是很有趣,但至少给了你一个起点。

编辑:"segfault“位告诉你,我敢打赌,你已经解引用了一个空指针。rsp是当前的堆栈指针。遗憾的是,它可能并不都那么有用。有了内存转储,你“也许”能够更准确地计算出你在函数中的位置,但它可能真的很难准确地计算出你在优化的构建中的位置

票数 7
EN

Stack Overflow用户

发布于 2011-01-24 15:18:12

我也得到了这个错误。当我看到:

代码语言:javascript
复制
probe.out[28503]: segfault at 0000000000000180 rip 00000000004450c0 rsp 00007fff4d508178 error 4

probe.out是一个使用libavformat (ffmpeg)的应用程序。我把它拆开了。

代码语言:javascript
复制
objdump -d probe.out

rip是运行指令的位置:

代码语言:javascript
复制
00000000004450c0 <ff_rtp_queued_packet_time>:
  4450c0:       48 8b 97 80 01 00 00    mov    0x180(%rdi),%rdx
  44d25d:       e8 5e 7e ff ff          callq  4450c0 <ff_rtp_queued_packet_time>

最后,我发现应用程序在函数ff_rtp_queued_packet_time中崩溃了

PS。有时地址并不完全匹配,但它几乎就在那里。

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

https://stackoverflow.com/questions/1456899

复制
相关文章

相似问题

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