Clo*_*oud 1 linux debugging gcc gdb postmortem-debugging
我试图在 Linux 系统上对崩溃的二进制文件“TestApp”进行事后分析。
我有一个二进制文件和共享对象的副本,它们被复制到路径中的设备上:
/usr/public/target
Run Code Online (Sandbox Code Playgroud)
此文件夹包含在被测系统上使用的目录结构中的所有相关二进制文件,即:
/usr/public/target/sbin/TestApp
/usr/public/target/lib/TestAppLib.so
/usr/public/target/usr/lib/TestAppAPILib.so
Run Code Online (Sandbox Code Playgroud)
自动构建过程从二进制文件中剥离调试信息,并将它们存储在外部符号文件中,全部位于:
/usr/public/target_external_symbols
Run Code Online (Sandbox Code Playgroud)
因此,上述二进制文件的符号信息将存在于以下文件中:
/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
Run Code Online (Sandbox Code Playgroud)
我如何让 GDB 知道这些外部符号的存在并加载它们?
我通常通过以下方式调用 GDB:
gdb TestApp TestApp.core
Run Code Online (Sandbox Code Playgroud)
我参考了其他关于创建测试.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.
Run Code Online (Sandbox Code Playgroud)
谢谢你。
| 归档时间: |
|
| 查看次数: |
3610 次 |
| 最近记录: |