我正在尝试在Ubuntu 16.04上调试一个简单的“hello world”C ++程序,但是gdb无法识别可执行文件格式。但是,我能够在命令行上成功运行可执行文件。 这是代码
#include <iostream>
using namespace std;
int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
我使用命令
编译程序文件TestProject.cppg++ -g TestProject.cpp -o hello
然后调试,我发出命令
gdb ./hello
我收到以下错误消息
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 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 "i686-linux-gnu".
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"...
"/home/<home>/./hello": not in executable format: File format not recognized
Ubuntu机器似乎有些损坏。因为我能够在另一个Ubuntu 16.04虚拟机上调试相同的程序。
答案 0 :(得分:6)
几乎确定ks1322的评论是正确的:
Enumerable.Range(0, 5)
是64位二进制文件(使用./hello
进行确认)。file ./hello
二进制文件。修复很简单:在32位模式下安装64位GDB(能够调试32位和64位二进制文件),或构建x86_64
(使用{ {1}})。
答案 1 :(得分:1)
我在Mac OS上遇到了同样的问题。 gdb中有一个错误:https://sourceware.org/bugzilla/show_bug.cgi?id=23746 他们的git仓库已经修复了。不幸的是,自制酒中的垃圾桶还没有。因此,我不得不git clone git://sourceware.org/git/binutils-gdb.git,对其进行编译并按照自述文件中的说明进行安装。 我相信这将使您在ubuntu上得到解决。
P.S。它可以在我的机器上运行,但是我必须以root身份运行eclipse: sudo /.../MacOS/eclipse。否则,我有Launching : Configuring GDB Aborting configuring GDB。原因我不知道如何解决(