堆栈跟踪、GDB 中没有函数名称,但出现在 LLDB 中

No function name in stack trace, GDB, but appears in LLDB

我目前正在尝试测试一个 Vector class 实现,并且正在尝试使用 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 ?? ()

由于回溯仅显示我的函数执行的绝对内存位置,这对于找出错误的位置并不是特别有用。

当我在 LLDB 中执行相同的任务时,输出更清晰一些:

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

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

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