这是我的第一篇文章,因此,如果我张贴任何错误或格式不正确的文章,我要致歉。
我的系统:运行MacOS Mojave 10.14.1,Netbeans 8.2的MacBook Pro
我正在运行一个简单的C ++程序,该程序可以打印世界:
int main(int argc, char** argv) {
cout << "Hello World" << endl;
return 0;
}
所以我的问题是我无法使用Netbeans或Terminal命令在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
答案 0 :(得分:0)
macOS上的编译器令人困惑。苹果公司将LLVM编译器作为Xcode的一部分提供,但它在/usr/bin/g++
处提供了一个存根,使人们相信他们正在使用GCC,即 GNU编译器集合。然后,他们尝试对LLVM生成的可执行文件使用gdb
,即 GNU调试器,并发现它不起作用。
恕我直言,您要么需要使用完全由Apple提供的工具,要么完全使用GNU提供的工具。
因此,让我们看一下第一种选择-使用Apple工具。在这种情况下,您可以使用:
/usr/bin/g++ -g main.cpp -o main
并使用以下命令进行调试:
/usr/bin/lldb ./main
和调试器命令似乎与GDB非常相似。
第二个选项是使用GCC和GDB,通常最好使用自制软件安装。安装命令为:
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 来做到这一点。