web-dev-qa-db-ja.com

実行形式ではないgdbエラー:ファイル形式が認識されません

Ubuntu 16.04で単純な「hello world」C++プログラムをデバッグしようとしていますが、gdbは実行可能ファイル形式を認識できません。ただし、コマンドラインで実行可能ファイルを正常に実行できます。これがコードです

#include <iostream>
using namespace std;

int main() {
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    return 0;
}

コマンドを使用してプログラムファイルTestProject.cppをコンパイルします

g++ -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仮想マシンで同じプログラムをデバッグできるからです。

15
Ashutosh Pandey

ほぼ ks1322のコメントが正しいことは確かです。

  1. 64ビットGCCをインストールしたので、./helloは64ビットバイナリです(確認するにはfile ./helloを使用してください)。
  2. 32ビットのみのGDBをインストールしたため、x86_64バイナリのデバッグ方法がわかりません。

修正は簡単です。64ビットGDB(32ビットと64ビットの両方のバイナリをデバッグできます)をインストールしますor 32ビットモードでhelloをビルドします(g++ -m32 ...)。

10

Mac OSでも同じ問題がありました。 gdbにバグがあります: https://sourceware.org/bugzilla/show_bug.cgi?id=23746 彼らのgitリポジトリはすでに修正されています。残念ながら、自作のビンにはまだそれがありません。そのため、私はgit clone git://sourceware.org/git/binutils-gdb.gitをgit cloneしてコンパイルし、readmeファイルに記述されているとおりにインストールする必要がありました。私はこれがubuntuであなたを修正すると信じています。

追伸それは私のマシンで動作しますが、ルートとしてEclipseを実行する必要があります:Sudo /.../MacOS/Eclipse。それ以外の場合、 起動:GDBの構成GDBの構成の中止 があります。私はそれを修正する方法がわからない原因(

3
Boris