2014-04-30 17 views
5

GDB si lamenta che il mio file sorgente è più recente dell'eseguibile e sembra che le informazioni di debug siano effettivamente correlate a una versione precedente del file sorgente, perché gdb si ferma su una riga vuota:"Il file sorgente è più recente di quello eseguibile" eccetto che non è

Program received signal SIGSEGV, Segmentation fault. 
0x0000000000000000 in ??() 
(gdb) up 
#1 0x00007ffff7ba2d88 in CBKeyPairGenerate (keyPair=0x602010) at library/src/CBHDKeys.c:246 
warning: Source file is more recent than executable. 
246 
(gdb) list 
241    if (versionBytes == CB_HD_KEY_VERSION_TEST_PUBLIC 
242      || versionBytes == CB_HD_KEY_VERSION_TEST_PRIVATE) 
243      return CB_NETWORK_TEST; 
244 
245    return CB_NETWORK_UNKNOWN; 
246 
247  } 
248 
249  uint8_t * CBHDKeyGetPrivateKey(CBHDKey * key) { 
250 

ma l'eseguibile è più recente del file di origine, vedere qui:

$ ls -l library/src/CBHDKeys.c 
-rw-r--r-- 1 matt matt 9249 Apr 29 22:40 library/src/CBHDKeys.c 
$ ls -l bin/noLowerAddressGenerator 
-rwxr-xr-x 1 matt matt 17845 Apr 30 15:52 bin/noLowerAddressGenerator 

ho provato ricostruzione dopo lo stesso problema si verifica make clean e ccache -C ma. Quando ho aggiornato il file sorgente ho aggiunto solo spazi bianchi, quindi la logica del programma rimane uguale. Sento che ha qualcosa a che fare con esso, ma da quando ho eliminato il ccache e pulito la directory build e bin con make clean non sono sicuro di cosa sia andando avanti.

Versioni:

  • GNU Make 3.81
  • gcc (Debian 4.8.2-16) 4.8.2
  • GNU gdb (GDB) 7.6.2 (Debian 7.6.2-1)
  • versione 3.1.9 ccache
  • SolydXK - SMP Debian 3.13.5-1 (2014-03-04)
+1

'CBKeyPairGenerate' sarà il nome della funzione,' noLowerAddressGenerator' è un eseguibile. –

+0

Controllare l'ovvio, ma: presumo che non ci siano altri exes noLowerAddressGenerator sul percorso che gdb potrebbe raccogliere? –

+0

C'è solo un noLowerAddressGenerator e in che modo gdb può ottenere file misti ovunque quando passo nel percorso esatto del file? –

risposta

0

Forse non stai utilizzando le più versione compilata del codice recente, se si trova in una libreria condivisa. Potresti usare ldd noLowerAddressGenerator per vedere le dipendenze della libreria del tuo programma; Non so se sia possibile all'interno di GDB trovare la libreria pertinente, ma dovrebbe esserci un modo (si prega di commentare o modificare se si sa come).

Se questo è davvero il caso, è possibile che si desideri set environment LD_LIBRARY_PATH in GDB prima di eseguire il programma, per posizionare la libreria appena costruita prima di qualsiasi altra installata. È possibile controllare l'impostazione della variabile ELF RPATH durante il collegamento, ma è probabile che ci sia un minore aiuto.

Un'altra possibilità è eseguire il debugger su un sistema in cui si sa che la libreria non è installata. Ho ottenuto buoni risultati usando schroot per mantenere separati gli ambienti di build/debug/install.