【问题标题】:GDB - Loading Debug information from external ".sym" filesGDB - 从外部“.sym”文件加载调试信息
【发布时间】:2013-11-29 17:38:36
【问题描述】:

我正在尝试在 linux 系统上对崩溃的二进制文件“TestApp”进行事后分析。

我有一个二进制文件和共享对象的副本,它们以路径复制到设备上:

/usr/public/target

此文件夹包含在被测系统上使用的目录结构中的所有有问题的二进制文件,即:

/usr/public/target/sbin/TestApp
/usr/public/target/lib/TestAppLib.so
/usr/public/target/usr/lib/TestAppAPILib.so

自动构建过程会从二进制文件中剥离调试信息,并将它们存储在外部符号文件中,全部位于:

/usr/public/target_external_symbols

因此,上述二进制文件的符号信息将存在于以下文件中:

/usr/public/target_external_symbols/sbin/TestApp.sym
/usr/public/target_external_symbols/lib/TestAppLib.so.sym
/usr/public/target_external_symbols/usr/lib/TestAppAPILib.so.sym

如何让 GDB 知道这些外部符号的存在并加载它们?

我通常通过以下方式调用 GDB:

gdb TestApp TestApp.core

我参考了其他关于创建测试.gdbinit 文件并通过-command 参数将其传递给GDB 的文章,但它似乎不起作用。每次我试图从我的核心文件中获取回溯时,我都会从 GDB 得到一个指示,它无法打开调试符号。感谢您对解决此问题的任何帮助。

(gdb) info shared
From        To          Syms Read   Shared Object Library
0x78000000  0x780061e8  Yes (*)     /usr/public/target/lib/TestAppLib.so
0x78010000  0x7806e60c  Yes (*)     /usr/public/target/usr/lib/TestAppAPILib.so
0x78070000  0x78091d2c  Yes (*)     /usr/public/target/lib/libm.so.2
(*): Shared library is missing debugging information.

谢谢。

【问题讨论】:

    标签: linux debugging gcc gdb postmortem-debugging


    【解决方案1】:

    有命令 set debug-file-directorysymbol-fileadd-symbol-file 从 gdb 会话中加载调试符号。后者可能需要共享库加载到内存中的地址。

    也许在您的构建过程中,“gnu debuglinks”已添加到您的二进制文件中。这意味着在可执行文件中有一个编码路径,指示 gdb 在哪里查找调试符号。更多内容请关注here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      相关资源
      最近更新 更多