堆栈跟踪中没有函数名称,GDB,但出现在LLDB中[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆栈跟踪中没有函数名称,GDB,但出现在LLDB中[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我目前正在尝试测试Vector类实现,并尝试使用GDB来查看错误发生的位置。

当我使用以下gcc -ggdb Vector.c TestVector.c编译,然后在GDB中运行它时,我得到以下输出(在崩溃并尝试打印堆栈跟踪之后):

| => gdb ./a.out
Reading symbols from ./a.out...Reading symbols from /Users/prog/Desktop/Generics/a.out.dSYM/Contents/Resources/DWARF/a.out...done.
done.
(gdb) r
Starting program: /Users/prog/Desktop/Generics/a.out
[New Thread 0x2703 of process 56984]
warning: unhandled dyld version (15)

Thread 2 received signal SIGSEGV, Segmentation fault.
0x00007fff65d97fe6 in ?? ()
(gdb) bt
#0  0x00007fff65d97fe6 in ?? ()
#1  0x00007ffeefbff640 in ?? ()
#2  0x00007fff65be4139 in ?? ()
#3  0x00007ffeefbff660 in ?? ()
#4  0x0000000000000000 in ?? ()

enter image description here在确定错误归因于回溯的位置时没有特别帮助,只显示了我的函数执行的绝对内存位置。

当我在LLDB中执行相同的任务时,输出更清晰:enter image description here

我的问题是,为什么gdb没有给我准确的信息和lldb呢(尽管我没有改变两个调试会话之间的编译设置),我该如何解决这个问题?

如果它有任何帮助,我使用Mac OS X,High Sierra作为我的操作系统。

答案

您正在使用的gdb无法识别dyld正在加载到进程中的共享库。请注意,在gdb输出的顶部,它显示“未处理的dyld版本(15)”。看起来您正在使用的gdb需要更新才能在macOS上正常工作。我不确定如何积极维护gdb的macOS端口。

以上是关于堆栈跟踪中没有函数名称,GDB,但出现在LLDB中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

GDB堆栈跟踪与汇编调试

gdb 显示奇怪的堆栈跟踪

在 perl 中出现错误但没有堆栈跟踪的正确方法是啥?

如何查看xcode调用堆栈

从核心转储中获取堆栈跟踪

从程序内部调用 gdb 以打印其堆栈跟踪的最佳方法?