2014-12-08 7 views
5

Ho un piccolo progetto C++ sotto Linux. Quando cerco di eseguire il debug l'eseguibile con gdb ottengo il seguente errore:GDB si arresta all'avvio (errore interno: follow_die_offset)

../../gdb/dwarf2read.c:16760: internal-error: follow_die_offset: 
Assertion 'dwarf2_per_objfile->reading_partial_symbols' failed. 
A problem internal to GDB has been detected, 
further debugging may prove unreliable. 

ho fortemente semplificato il progetto al seguente codice e ancora ottenere lo stesso errore:

Bh:

#ifndef B_H_ 
#define B_H_ 

#include <vector> 
class B { 
public: 
    B(); 
    std::vector<double> p; 
}; 

#endif /* B_H_ */ 

B.cpp:

#include "B.h" 
B::B() {} 

Dh:

#ifndef D_H_ 
#define D_H_ 

#include "E.h" 

class D: public E { 
public: 
    D(); 
}; 

#endif /* D_H_ */ 

D.cpp:

#include "D.h" 

D::D() : E() {} 

E.h:

#ifndef E_H_ 
#define E_H_ 

#include <functional> 

class E { 

public: 
    void set(const std::function<double(void)>& f); 
    std::function<double(void)> e; 

}; 

#endif /* E_H_ */ 

E.cpp:

#include "E.h" 

void E::set(const std::function<double(void)>& f) { 
    e = f; 
} 

main.cpp:

int main() {} 

makefile:

all: Test 

%.o: %.cpp 
    icpc -c -std=c++11 -g -o [email protected] $< 

Test: main.o D.o E.o B.o 
    icpc -std=c++11 -o [email protected] $^ 

clean: 
    rm -f D.o E.o B.o Test main.o 

.PHONY: all clean 

L'errore si verifica se faccio:

gdb Test 

e quindi richiamare

run 

nella CLI gdb.

Il mio sistema:

Aperto Suse 12.3, 64bit

--version ICPC:

icpc (ICC) 15.0.1 20141023 

-v ICPC:

icpc version 15.0.1 (gcc version 4.7.0 compatibility) 

gdb --version:

GNU gdb (GDB) SUSE (7.5.1-2.1.1) 
.515.053.691,36321 milioni

--version gcc:

gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012] 

Non ho idea di ciò che è sbagliato con il codice data e il motivo per cui si blocca il debugger. Per esempio se commento il costruttore della classe B (che non fa nulla e dovrebbe essere equivalente al costruttore predefinito) l'errore non appare più.

+0

Se la versione di Intel System Studio include il proprio gdb, puoi provarlo? –

+0

Penso di averlo fatto ma non sono sicuro di cosa dovrei fare. Prendi semplicemente l'eseguibile gdb dalla cartella bin di intel_composer? – user1304680

+0

Nella versione che ho, c'è un file 'debuggervars.sh' nella directory bin del sistema di studio. Se quella directory nel tuo percorso di ricerca, digita 'source debuggervars.sh', e imposterà il tuo ambiente in modo da poter eseguire il debugger di Intel digitando' gdb-ia'. –

risposta

1

I have no idea what is wrong with the given code and why the debugger crashes.

Non c'è probabilmente niente di sbagliato con il codice, ma il compilatore può essere generando valida informazioni NANO di debug, e la vostra un po 'vecchio GDB ha certamente un bug che fare con questo.

Si noti che si sta usando molto nuovo icpc con il vecchio GDB, quindi questo non è molto sorprendente.

Il primo passo dovrebbe essere quello di creare GDB corrente (7.8.1) e verificare se ha ancora un problema.

Nel caso improbabile che lo faccia, è necessario segnalarlo in GDB bugzilla.

Come soluzione alternativa, puoi anche provare a creare sorgenti con GCC anziché ICC.

+0

Suppongo che sia vero, anche l'errore se ne va con versioni precedenti di icc. Proverò anche con i nuovi gdb. – user1304680

+1

GDB 7.8.1 produce lo stesso errore. – user1304680

+0

Quindi probabilmente si può almeno archiviare un report di errore (insieme a testcase). – dbrank0