【问题标题】:Backtrace to shared library without using third party application在不使用第三方应用程序的情况下回溯到共享库
【发布时间】:2016-07-20 19:16:16
【问题描述】:

如何从共享库中获取函数名称和崩溃原因。 我可以完全访问共享库;我可以用不同的标志重新编译它,甚至是主要源代码。请告诉我该怎么做?

目前我在信号处理程序中实现了回溯功能,但它提供的是主函数的跟踪,而不是共享库的跟踪。

【问题讨论】:

  • 查找“核心转储”和“gdb”。
  • ...不要忘记使用调试符号进行编译,否则您的跟踪将只包含内存地址。

标签: c linux backtrace


【解决方案1】:

假设您使用的是 glibc,您可以 LD_PRELOAD 包含的 libSegFault 库来捕获信号并打印堆栈跟踪。

$ LD_PRELOAD=/lib/libSegFault.so ./a.out

【讨论】:

    【解决方案2】:

    当你重新编译库时,使用 -g 标志。通常这是通过 Makefile 中的 CFLAGS 或 CPPFLAGS 之类的东西来完成的。此外,在二进制文件上运行 gdb 之前,您应该设置 LD_LIBRARY_PATH 以包含共享库的调试版本的路径(如果 LD_LIBRARY_PATH 中存在其他项目,请确保您的条目位于最前面)。最后可以将源码复制到工作目录中,这样就可以找到源码并设置断点了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 2017-06-27
      • 2014-06-11
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多