【问题标题】:Debug crash using C Map file in linux?在linux中使用C Map文件调试崩溃?
【发布时间】:2013-09-18 17:26:42
【问题描述】:

我在这里看到了一份文件http://www.codeproject.com/Articles/3472/Finding-crash-information-using-the-MAP-file。这个例子是关于在 Windows 文件中看到的崩溃?我正在寻找与 Linux 系统上产生的崩溃相同的数学运算。如果我在 Linux 上发生崩溃,那么我将如何在类似 Microsoft 文档http://www.codeproject.com/Articles/3472/Finding-crash-information-using-the-MAP-file 的行中调试问题。请帮忙? Linux中的加载地址和代码段地址是否相同?如链接“二进制文件的第一部分是可移植可执行文件 (PE),长度为 0x1000 字节”中所述,Linux 中的以下内容是什么?

【问题讨论】:

  • 假设我有一个大型软件堆栈。驱动程序来自一家公司,中间件来自另一家公司,应用程序来自另一家公司。现在,假设应用程序公司已经剥离了调试信息,那么我将如何在他们的模块中找到崩溃。我会因为一些地址值和符号而崩溃???。这只有在我有地图文件的情况下才能解决。正确的??这个问题与记住这些场景有关。

标签: c linux


【解决方案1】:

PE 是 windows 格式。 Linux 使用 ELF。当然,您可以手动解析 ELF,但您不应该 - gdb 可以为您做到这一点。更重要的是,您可以使用 addr2line 实用程序将地址映射到源代码中的文件/行(当然这两个都需要调试构建)。

Map 文件在 linux 中很少使用——它通常只是调试可执行文件的一部分。但是,它可以从调试构建中转储,但没有太大的实用价值。

另外,看看How to use addr2line command in linux

【讨论】:

  • 假设我有一个大型软件堆栈。驱动程序来自一家公司,中间件来自一家公司,应用程序来自另一家公司。现在,假设应用程序公司已经剥离了调试信息,那么我将如何在他们的模块中找到崩溃。我会因为一些地址值和符号而崩溃???。只有我有地图文件才能解决这个问题。
  • 'debugging information stripped' 表示你没有地图文件,所以没有符号给你,只有地址。请说明您拥有什么以及您想要实现什么。
  • 那么,在您看来,没有办法在没有调试符号的发布版本变体中找出崩溃?
  • 应用程序开发人员可以——他们有调试符号,所以如果你向他们提供崩溃地址——他们可以使用 addr2line 或 gdb。如果某些符号仍然存在(例如函数名称) - 您可以使用 gdb 找出函数名称 - 但为什么呢?没有源代码有什么用?
  • 这是集成组织中的典型场景,应用程序由某人开发,中间件由他人开发,驱动程序由第三方提供。崩溃日志被发送给集成商,他负责解决问题。没有人会责怪他们,那么在这种情况下如何根据调试日志正确地定位到供应商。我了解如果该符号不属于您的代码,那么它是第三方。如何归结为特定的第三方,我的意思是应用程序或中间件。如果我假设我是一名司机。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
相关资源
最近更新 更多