如何从共享库中获取崩溃的函数名称和原因。 我可以完全访问共享库;我可以用不同的标志重新编译它,甚至是主要来源。请告诉我怎么做?
目前我在信号处理程序中实现了回溯功能,但它提供了主要功能的跟踪,但没有提供共享库跟踪。
答案 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中存在其他项,请确保您的条目位于前面)。最后,您可以将源复制到工作目录中,以便找到源代码,并设置断点。