web-dev-qa-db-fra.com

erreur gdb non au format exécutable: format de fichier non reconnu

J'essaie de déboguer un simple programme C++ "hello world" sous Ubuntu 16.04 mais gdb n'est pas en mesure de reconnaître le format de fichier exécutable. Cependant, je suis capable d'exécuter l'exécutable avec succès sur la ligne de commande. Voici le code

#include <iostream>
using namespace std;

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

Je compile le fichier de programme TestProject.cpp en utilisant la commande 

g++ -g TestProject.cpp -o hello

Puis pour déboguer, je donne la commande 

gdb ./hello

Je reçois le message d'erreur suivant

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

Quelque chose semble corrompu avec la machine Ubuntu. Parce que je suis capable de déboguer le même programme sur une autre machine virtuelle Ubuntu 16.04.

6
Ashutosh Pandey

Il est presque certain que le commentaire de ks1322 est correct:

  1. Vous avez installé un GCC 64 bits, votre ./hello est donc un binaire 64 bits (utilisez file ./hello pour confirmer).
  2. Vous avez installé une GDB 32 bits uniquement, de sorte qu'elle ne sait pas comment déboguer les fichiers binaires x86_64.

Le correctif est simple: installez GDB 64 bits (qui est capable de déboguer les fichiers binaires 32 et 64 bits), ou build hello en mode 32 bits (avec g++ -m32 ...).

6
Employed Russian

J'ai eu le même problème sur mac os . Il y a un bogue dans gdb: https://sourceware.org/bugzilla/show_bug.cgi?id=23746 Leur dépôt git a déjà eu le réparer. Malheureusement, les poubelles de l'homebrew ne l'ont pas encore fait. Donc, je devais git cloner git: //sourceware.org/git/binutils-gdb.git, le compiler et l'installer tel qu'il est décrit dans le fichier lisez-moi .

P.S. cela fonctionne sur ma machine mais je dois exécuter Eclipse en tant que root: Sudo /.../MacOS/Eclipse. Sinon, j'ai Lancement: Configuration de GDB Abandon de la configuration de GDB . Parce que je ne sais pas comment le réparer (

1
Boris