gpt4 book ai didi

linux - GDB - 从外部 ".sym"文件加载调试信息

转载 作者:太空宇宙 更新时间:2023-11-04 09:01:37 27 4
gpt4 key购买 nike

我正在尝试对 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.

谢谢。

最佳答案

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

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

关于linux - GDB - 从外部 ".sym"文件加载调试信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20290943/

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