在 macOS 上,GDB 在“新线程”后挂起

在 macOS 上,GDB 在“新线程”后挂起

我已经在 macOS 12.0 上从源代码构建了 GDB 并对其进行了代码签名。但是,每次我尝试调试程序时,都会出现以下情况:

(gdb) b main
Breakpoint 1 at 0x10000324f: file main.cpp, line 50.
(gdb) run
Starting program: /Users/tjcaul/Documents/C++/a.out 
[New Thread 0x2a03 of process 2389]

然后 GDB 挂起。我一直在用 g++ 编译 C++ 程序。以下是我尝试过的一些方法:

  1. 使用 -g 选项进行编译。
  2. 使用 -ggdb 选项进行编译。
  3. 使用 -ggdb3 选项进行编译。
  4. 运行sudo
  5. 反复终止并重新运行 gdb。
  6. 尝试不同的二进制文件。
  7. 禁用 SIP
  8. 添加更多断点。
  9. set startup-with-shell off.gdbinit

我愿意不是获取任务门控/Mach 端口错误;仅新线程消息。

我意识到这是,但我没有看到关于该问题的有效答案。

作为参考,以下是我的版本:

$ g++ --version
Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin21.0.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
$ gdb --version
GNU gdb (GDB) 10.2

答案1

和往常一样,问题在于对细节的关注。我看到了g++ --version报告clang,但我没有充分考虑。我以为问题出在 GDB 上,而不是我的编译器上。我不确定 Apple 为什么将 g++ 与 clang++ 联系起来,因为这很容易让人误解。这个小疏忽让我花了 8 个月的时间在手机上编写 C++(60 个字符宽的显示器上的 vi 不是我理想的 IDE)。

我做了什么来获得真实的克++:

  1. 使用 Homebrew 安装 gcc

  2. 软链接 ( ln -s) gcc-11 和 g++-11 从/usr/local/Cellar//usr/local/bin/

  3. unhash(至少在 zsh 中)gcc 和 g++,否则gcc将继续扩展到/usr/bin/clang

GDB 现在大部分时间都在工作。

答案2

这个挂起导致 gdb 错误:https://sourceware.org/bugzilla/show_bug.cgi?id=24069

您可以从该源安装带有补丁的 gdb:

brew install --force --build-from-source domq/gdb/gdb  # a patched version based on 10.1

或者你可以

brew update
brew install gdb # use gdb 12.1

它对我有用,我通过以下链接找到了它:https://gist.github.com/mike-myers-tob/9a6013124bad7ff074d3297db2c98247

相关内容