我得到这个奇怪的回溯(有时):
(gdb) bt
#0 0x00002b36465a5d4c in AY16_Loop_M16 () from /opt/intel/mkl/10.0.3.020/lib/em64t/libmkl_mc.so
#1 0x00000000000021da in ?? ()
#2 0x00000000000021da in ?? ()
#3 0xbf3e9dec2f04aeff in ?? ()
#4 0xbf480541bd29306a in ?? ()
#5 0xbf3e6017955273e8 in ?? ()
#6 0xbf442b937c2c1f37 in ?? ()
#7 0x3f5580165832d744 in ?? ()
...
为什么我看不到符号的任何想法?当然是用调试syms编译的。 同一个会话在其他点给出了符号。
答案 0 :(得分:3)
AY16_Loop_M16()
中的libmkl_mc.so
最有可能是在汇编中编写的,并且没有正确的展开描述符,这是GDB在x86_64上正确展开堆栈所需的(在没有帧指针的情况下)。
您最好的选择是联系英特尔,并要求他们添加适当的展开描述符。
如果在AY16_Loop_M16
的开头设置断点,如果从C(或任何其他非汇编语言)调用断点,则可能会得到更好的结果,您可能会获得合理的堆栈跟踪进入。
答案 1 :(得分:0)
虽然您的代码可能使用调试符号进行编译,但共享库的情况可能并非如此。您可能需要安装这些库的调试版本才能获得这些符号。
您仍然可以使用GDB调试自己的代码。只需忽略未知位置,并在回溯中查找自己的函数调用。无论如何,问题不在共享库中,这很好。