2014-04-30 7 views
5

GDB beschwert sich, dass meine Quelldatei aktueller ist als die ausführbare Datei, und es scheint, dass die Debugging-Informationen tatsächlich auf eine ältere Version der Quelldatei bezogen sind, weil gDB wird in einer leeren Zeile zu stoppen:"Quelldatei ist neuer als ausführbar" außer es ist nicht

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 

aber die ausführbare Datei ist neuer als die Quelldatei finden Sie hier:

$ 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 

ich Wiederaufbau versuchte nach make clean und ccache -C aber das gleiche Problem auftritt. Wenn ich die Quelldatei aktualisierte, fügte ich nur Leerzeichen hinzu, so dass die Programmlogik gleich bleibt. Ich habe das Gefühl, dass etwas damit zu tun hat, aber seit ich den Ccache gelöscht und das Build- und Bin-Verzeichnis mit make clean gereinigt habe, bin ich mir nicht sicher geht weiter.

Versionen:

  • 3,81 GNU Make
  • gcc (Debian 4.8.2-16) 4.8.2
  • GNU gdb (GDB) 7.6.2 (Debian 7.6.2-1)
  • ccache Version 3.1.9
  • SolydXK - SMP Debian 3.13.5-1 (2014-03-04)
+1

'CBKeyPairGenerate' ist der Funktionsname,' noLowerAddressGenerator' ist eine ausführbare Datei. –

+0

Überprüfung der offensichtlichen, aber: Ich nehme an, es gibt keine anderen NoLowerAddressGenerator Exes auf dem Pfad, die Gdb könnte abholen? –

+0

Es gibt nur einen noLowerAddressGenerator und wie kann gdb Dateien irgendwo durcheinander bringen, wenn ich den genauen Pfad zur Datei übergebe? –

Antwort

0

Vielleicht sind Sie die meisten nicht mit neu kompilierte Version des Codes, wenn er sich in einer gemeinsam genutzten Bibliothek befindet. Sie könnten ldd noLowerAddressGenerator verwenden, um die Bibliotheksabhängigkeiten Ihres Programms zu sehen; Ich weiß nicht, ob es innerhalb von GDB möglich ist, die relevante Bibliothek zu finden, aber es sollte einen Weg geben (bitte kommentieren oder editieren, wenn Sie wissen, wie).

Wenn dies in der Tat der Fall ist, möchten Sie möglicherweise in GDB vor dem Ausführen des Programms, um Ihre neu erstellte Bibliothek vor allen installierten zu platzieren. Sie könnten beim Festlegen der ELF-Variablen RPATH nachsehen, aber das ist wahrscheinlich weniger hilfreich.

Eine andere Möglichkeit besteht darin, Ihren Debugger auf einem System auszuführen, von dem Sie wissen, dass die Bibliothek nicht installiert ist. Ich hatte gute Ergebnisse mit schroot, um Build/Debug/Installationsumgebungen getrennt zu halten.

Verwandte Themen