我正在做一个非常大的项目。我的项目包含许多共享库。一些源文件(CPP)在多个共享库中使用。
最近,我遇到了一个错误,需要在执行过程中找出函数的.so名称。
例如:
Test1.cpp包含函数TestMethod()
Test1.cpp包含在lib1,lib2和lib5中。大约有10个库。
因此,TestMethod存在于lib1,lib2和lib5中。
TestMethod()正在创建SubType的对象,该对象是SuperType的子类。 SubType和SuperType在Test1.cpp中定义。有时lib6 / lib7在调用TestMethod并获取对象。完成后,lib6 / lib7在对象指针上调用delete。但是删除操作因分段错误而崩溃,回溯顶部显示“类别SubType类的typeinfo”。
[注1]:我正在使用libc ++库。 RTTI将无法在共享库中工作。因此,我怀疑这是导致问题的原因。我怀疑当调用delete时,它(lib6中的delete调用)似乎正在尝试获取SubType的typeinfo而无法获取它。
通过了解使用了什么库的信息,我可以调试编译,链接用于准备共享库的标志。
将感谢您的任何建议。谢谢
答案 0 :(得分:0)
您可以为此使用环境变量LD_DEBUG=bindings
。例如。查看在何处定义函数malloc
:
$ LD_DEBUG=bindings ls 2>&1 | grep '\bmalloc\b'
45968: binding file /lib/x86_64-linux-gnu/libc.so.6 [0] to ls [0]: normal symbol `malloc' [GLIBC_2.2.5]
45968: binding file /lib/x86_64-linux-gnu/libpcre.so.3 [0] to ls [0]: normal symbol `malloc' [GLIBC_2.2.5]
45968: binding file /lib64/ld-linux-x86-64.so.2 [0] to /lib/x86_64-linux-gnu/libc.so.6 [0]: normal symbol `malloc' [GLIBC_2.2.5]
45968: binding file /lib/x86_64-linux-gnu/libc.so.6 [0] to /lib/x86_64-linux-gnu/libc.so.6 [0]: normal symbol `malloc' [GLIBC_2.2.5]
45968: binding file ls [0] to /lib/x86_64-linux-gnu/libc.so.6 [0]: normal symbol `malloc' [GLIBC_2.2.5]