在不使用第三方应用程序的情况下回溯到共享库

时间:2016-04-01 05:18:14

标签: c linux backtrace

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

目前我在信号处理程序中实现了回溯功能,但它提供了主要功能的跟踪,但没有提供共享库跟踪。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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