无论我尝试啥,GDB 都无法在我的 Mac (Mojave) 上运行。常见错误,但我没有找到解决方案

Posted

技术标签:

【中文标题】无论我尝试啥,GDB 都无法在我的 Mac (Mojave) 上运行。常见错误,但我没有找到解决方案【英文标题】:No matter what I tried, GDB just won't work on my Mac (Mojave). Common error but I've found no solutions无论我尝试什么,GDB 都无法在我的 Mac (Mojave) 上运行。常见错误,但我没有找到解决方案 【发布时间】:2018-11-17 17:41:12 【问题描述】:

这是我的第一篇文章,所以如果我发布任何错误或格式不正确,我提前道歉。

我的系统:运行 MacOS Mojave 10.14.1、Netbeans 8.2 的 MacBook Pro

我正在运行一个打印 hello world 的简单 C++ 程序:

int main(int argc, char** argv) 

    cout << "Hello World" << endl;

    return 0;

所以我的问题是我无法使用 Netbeans 或终端命令在我的 MacBook 上运行调试器。每次我这样做,我都会收到以下错误:

不是可执行格式:文件格式无法识别

我最初遇到的问题是缺少调试器命令。我按照here 的指示安装了 Homebrew,得到了 gdb,并对 gdb 二进制文件进行了代码签名。毕竟,我开始收到上面突出显示的错误。

我在谷歌上搜索了这个新问题,我发现this stack overflow post 这表明我在构建 64 位时可能正在运行 32 位 gdb。但是,根据运行 gdb 时的输出:

GNU gdb (GDB) 8.2
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin18.0.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
BFD: /Users/Anon/Desktop/gdb_test/gdb_test: unknown load command 0x32
BFD: /Users/Anon/Desktop/gdb_test/gdb_test: unknown load command 0x32
"/Users/Anon/Desktop/gdb_test/gdb_test": not in executable format: file format not recognized

以及GDB的配置:

This GDB was configured as follows:
   configure --host=x86_64-apple-darwin18.0.0 --target=x86_64-apple-darwin18.0.0
         --with-auto-load-dir=:$prefix/share/auto-load
         --with-auto-load-safe-path=:$prefix/share/auto-load
         --with-expat
         --with-gdb-datadir=/usr/local/Cellar/gdb/8.2/share/gdb (relocatable)
         --with-jit-reader-dir=/usr/local/Cellar/gdb/8.2/lib/gdb (relocatable)
         --without-libunwind-ia64
         --without-lzma
         --without-babeltrace
         --without-intel-pt
         --disable-libmcheck
         --without-mpfr
         --with-python=/System/Library/Frameworks/Python.framework/Versions/2.7
         --without-guile
         --with-separate-debug-dir=/usr/local/Cellar/gdb/8.2/lib/debug (relocatable)

("Relocatable" means the directory can be moved with the GDB installation tree, and GDB will still find it.)

看来我的 GDB 确实是 64 位的,所以我猜这不是问题所在。我还找到了this post,上面的答案表明 gdb 8.2 不可能被破坏,我应该降级到 8.0.1。然而,一个编辑说 GNU 团队的更新(据说)已经解决了这个问题,所以我运行:

brew update

并确保一切都是最新的,但我仍然遇到同样的错误。

我在这里束手无策,我已经投入了太多时间来尝试解决这个问题。如果无法修复,您能否建议其他无障碍方式(大量强调无障碍)我可以在我的 Mac 上调试 C/C++ 程序?否则,我会坚持我大学的计算机实验室。

编辑:这是我从终端编译的方式

g++ -g main.cpp -o main

我正在使用 g++ 编译器在具有 C++14 标准的 Netbeans 中以调试模式(64 位)进行编译。

编译后我通过写入终端调用gdb:

gdb main

或者通过简单地使用 Netbeans 中的 GUI

【问题讨论】:

加油!您如何编译程序(即哪个编译器和哪个开关)以及您如何尝试启动 gdb 是非常基本的 - 您需要在您的帖子下单击 edit 并添加它。 如果你不能让它在你的 Mac 上运行,其他选项是 ssh 进入你的大学计算机,获取一个免费的 Amazon E2C Linux 实例并连接到它并在那里编译你可以从 Uni 或家里做,或者在你的 Mac 上安装 VirtualBox,然后在那里安装一个 Linux 虚拟机。 @MarkSetchell 感谢您的建议,尽管我已经在需要时进行了远程登录。就是不方便 我们是否应该关闭 ***.com/questions/52529838/… 的副本? gdb 8.2 can't recognized executable file on macOS Mojave 10.14 的可能重复项。另请参阅 Binutils 错误跟踪器中的 Issue 23728, binutils fail on macOS 10.14 (Mojave) due to unimpl。你需要 GDB 8.3。 【参考方案1】:

macOS 上的编译器令人困惑。 Apple 将 LLVM 编译器作为 Xcode 的一部分提供,但它在 /usr/bin/g++ 提供了一个存根,这使人们相信他们正在使用 GCC,即 GNU Compiler Collection。然后他们尝试使用 gdb,即 GNU 调试器 和 LLVM 生成的可执行文件,但发现它不起作用。

恕我直言,您要么需要使用完全由 Apple 提供的工具,要么需要完全由 GNU 提供的工具。


那么,让我们看看第一个选项 - 使用 Apple 工具。在这种情况下,你编译:

/usr/bin/g++ -g main.cpp -o main

并使用以下命令进行调试:

/usr/bin/lldb ./main

调试器命令看起来与 GDB 非常相似。


第二个选项是使用 GCC 和 GDB,它们通常最好使用 homebrew 安装。安装命令为:

brew install gcc
brew install gdb

然后您将使用以下内容进行编译:

/usr/local/bin/g++-8 -g main.cpp -o main

并使用以下内容进行调试:

/usr/local/bin/gdb ./main

但是,我暂时无法让它在 macOS Mojave 上运行!我读到 here 说 GDB v8.1 不能在 macOS 上运行,您需要安装 v8.0.1,但似乎无法使用 homebrew

【讨论】:

在运行g++ -v 后我得到Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1 Apple LLVM version 10.0.0 (clang-1000.10.44.4) Target: x86_64-apple-darwin18.2.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin 但是在安装gcc 并像你说的那样编译/调试后我仍然得到同样的错误 gdb 与 LLVM 构建的可执行文件、用汇编编写的程序以及通过用冰箱磁铁翻转硬盘上的位直接以机器代码创建的二进制文件完美地配合。如果它运行,您应该能够在(未损坏的)gdb 中运行它。您可能会或可能不会进行符号调试,但这不是这个问题的目的。

以上是关于无论我尝试啥,GDB 都无法在我的 Mac (Mojave) 上运行。常见错误,但我没有找到解决方案的主要内容,如果未能解决你的问题,请参考以下文章

无论我尝试啥,我都无法垂直对齐这个[关闭]

无论我尝试啥,我都无法让这个应用程序匹配所有不同的设备尺寸,关于如何使用这样的约束有啥建议吗?

无法在我的 Mac 中打开 Apple Configurator

无论我尝试啥,我的不和谐机器人自然会阻止 DM 选项

Git选项卡完成在mac上的zsh中不起作用

Laravel 4 - 无论我输入啥代码,我的 css 页面都会出错