Debuging
-
Hey,
ich hab jetzt einmal absichtlich eine Kleinigkeit im Programm falsch gemacht:
//... beginnend ab Zeile 36 int main ( int argc, char * const argv[] ) { // Get current working directory getcwd(ObayaCurrentDir, sizeof(ObayaCurrentDir)); delete ObayaCurrentDir; // Setting AppName into variable ObayaAppName = argv[0]; if ( argc > 1 ) { } return 0; }delete ObayaCurrentDir lässt das Programm abstürzen mir folgender Fehlermeldung:
glibc detected *** ./obaya: free(): invalid pointer: 0x08049aa0 *** ======= Backtrace: ========= /lib/i686/cmov/libc.so.6[0xb7cd1624] /lib/i686/cmov/libc.so.6(cfree+0x96)[0xb7cd3826] /usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xb7eaa2e1] ./obaya(__gxx_personality_v0+0x189)[0x804872d] /lib/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb7c79455] ./obaya(__gxx_personality_v0+0x3d)[0x80485e1] ======= Memory map: ======== 08048000-08049000 r-xp 00000000 03:01 1710215 /home/lumio/dev/obaya/obaya 08049000-0804a000 rw-p 00000000 03:01 1710215 /home/lumio/dev/obaya/obaya 09639000-0965a000 rw-p 09639000 00:00 0 [heap] b7c62000-b7c63000 rw-p b7c62000 00:00 0 b7c63000-b7db8000 r-xp 00000000 03:01 1594341 /lib/i686/cmov/libc-2.7.so b7db8000-b7db9000 r--p 00155000 03:01 1594341 /lib/i686/cmov/libc-2.7.so b7db9000-b7dbb000 rw-p 00156000 03:01 1594341 /lib/i686/cmov/libc-2.7.so b7dbb000-b7dbe000 rw-p b7dbb000 00:00 0 b7dbe000-b7dca000 r-xp 00000000 03:01 1586147 /lib/libgcc_s.so.1 b7dca000-b7dcb000 rw-p 0000b000 03:01 1586147 /lib/libgcc_s.so.1 b7dcb000-b7dcc000 rw-p b7dcb000 00:00 0 b7dcc000-b7df0000 r-xp 00000000 03:01 1594323 /lib/i686/cmov/libm-2.7.so b7df0000-b7df2000 rw-p 00023000 03:01 1594323 /lib/i686/cmov/libm-2.7.so b7df2000-b7ed5000 r-xp 00000000 03:01 1676591 /usr/lib/libstdc++.so.6.0.10 b7ed5000-b7ed8000 r--p 000e2000 03:01 1676591 /usr/lib/libstdc++.so.6.0.10 b7ed8000-b7eda000 rw-p 000e5000 03:01 1676591 /usr/lib/libstdc++.so.6.0.10 b7eda000-b7ee0000 rw-p b7eda000 00:00 0 b7ee4000-b7ee6000 rw-p b7ee4000 00:00 0 b7ee6000-b7ee7000 r-xp b7ee6000 00:00 0 [vdso] b7ee7000-b7f01000 r-xp 00000000 03:01 1586476 /lib/ld-2.7.so b7f01000-b7f03000 rw-p 0001a000 03:01 1586476 /lib/ld-2.7.so bfc98000-bfcad000 rw-p bffeb000 00:00 0 [stack] AbortedAllerdings sagt mir das jetzt genau garnichts
was sollt mir das aber sagen?danke schonmal

-
Das sagt, dass ObayaCurrentDir ein ungültiger Pointer ist. Wo wird ObayaCurrentDir denn definiert?
-
Ja, die Variable wird global in main.cpp definiert

-
Das sagt dir das es eventuell schlau wäre auch noch einen Debugger (gdb?) zu starten und dir dann den Stacktrace und eventuelle Daten im Speicher anzuschauen. Natürlich darf dann nicht vergessen werden mit Debuginformationen zu kompilieren.
-
Aber nehmen wir mal an, das is alles, was ich bekomme... von jemanden, der das Programm verwendet. Wie kann ich dann am einfachsten den Fehler rückverfolgen?
-
Na, steht doch da, was falsch gelaufen ist:
glibc detected *** ./obaya: free(): invalid pointer: 0x08049aa0 ***
Ungültiger Zeiger. Was für Informationen brauchst du da denn noch mehr?
Wenn du keine Debuginformationen hast kannst du den Binärcode trotzdem mit z.B Ollydbg anschauen und da Breakpoints setzen und rumsteppen, wie du lustig bist. Du hast halt einfach keinen C++ Code.
Und andernfalls musst du das wohl auch lokal an einer Debugversion nachvollziehen, was ja kein Problem scheint zu sein, oder?
-
Okay
gut zu wissen. Danke.Ne is kein Problem... solang man ja den originalen Code hat
