Sascha Bahl
26-02-2006, 17:48
Hallo!
Zunächst einmal: Ja, ich habe mir die anderen Threads, die debuggen mit KDevelop als Thema haben durchgelesen. Leider haben diese mir nicht weitergeholfen.
Das eigentliche Problem:
Leider habe ich bis jetzt mehr unter Windows mit dem Visual Studio als unter Linux programmiert. Meine Erfahrungen und Herangehensweise beim debuggen beispielsweise versuche ich natürlich abzuleiten. Was mir nicht ganz klar ist: Ich setze einen Breakpoint in einer bestimmten Zeile, dann betätige ich den Knopf "Führt die Anwendung im Debugger aus!". Programm startet, hält aber nicht am Breakpoint an, sondern überspringt diesen. Wenn ich den Breakpoint an einer Stelle platziere, die erst später ausgeführt wird, kann ich die Anwendung anhalten und auch Einzelschritte ausführen um von einer Zeile zur nächsten zu springen. Der Haken: Ich sehe nicht in welcher Zeile ich mich gerade befinde. Ausserdem zeigt mir die Überwachung der Variable nur 0 an oder ein Fragezeichen. Die Meldung: "Keine Quelle: #0 ..." überzeugt mich davon, dass hier was noch nicht stimmt. Nur was? In den configure-Optionen habe ich schon den Parameter "--enable-debug=full" angegeben. Kompiliert wird mit g++ und der Option -g3.
Was habe ich noch übersehen, was mache ich falsch? Ich habe weder in den Manpages, noch über Suchmaschinen oder diesem Forum Antworten auf meine Fragen gefunden. Natürlich ist mir auch klar, dass debuggen nur eine Form des Fehler findens ist. strace oder Ausgaben während der Codeausführung sind mir nicht fremd. Aber Debuggen aus KDevelop halte ich für bequemer und effizienter, wenn ich nicht völlig falsch liege, dass es ungefähr so komfortabel ist wie im Visual Studio. Entschuldigt aber den Vergleich zu Micro$oft-Produkten. Ich hasse sie. Um so wichtiger debuggen unter Linux zu verstehen.
Vielen Dank schonmal
Sascha Bahl
P.S.
KDE 3.4, KDevelop 3.2, ansonsten SuSE 9.3
Auszug der Ausgabe von GDB:
/bin/sh -c /home/sascha/ssserver/debug/libtool gdb /home/sascha/ssserver/debug/src/ssserver -fullname -nx -quiet
(gdb) set edit off
(gdb) set confirm off
*** Warning: inferring the mode of operation is deprecated.
*** Future versions of Libtool will require -mode=MODE be specified.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb)
(gdb)
(gdb) set print static-members off
(gdb) tty /dev/pts/4
(gdb) set width 0
(gdb) set height 0
(gdb) set stop-on 1
(gdb) handle SIG32 pass nostop noprint
(gdb) handle SIG41 pass nostop noprint
(gdb) handle SIG43 pass nostop noprint
(gdb) set print asm-demangle on
(gdb) set output-radix 10
(gdb) cd /home/sascha/ssserver/debug/src
(gdb) break cserversocket.cpp:70
Breakpoint 1 at 0x804903f: file /home/sascha/ssserver/src/cserversocket.cpp, line 70.
(gdb) break cserversocket.cpp:82
Breakpoint 2 at 0x80490ca: file /home/sascha/ssserver/src/cserversocket.cpp, line 82.
(gdb) run
Stopped due to shared library event
(gdb) continue
Stopped due to shared library event
(gdb) continue
Stopped due to shared library event
(gdb) continue
Program received signal SIGINT, Interrupt.
0xffffe410 in ?? ()
(gdb) backtrace
#0 0xffffe410 in ?? ()
#1 0xbfffef98 in ?? ()
#2 0x0804b008 in ?? ()
#3 0xbfffeee0 in ?? ()
#4 0x401d8681 in accept () from /lib/tls/libc.so.6
#5 0x08049220 in CServerSocket (this=0x804b008) at /home/sascha/ssserver/src/cserversocket.cpp:68
#6 0x08048cf7 in main (argc=1, argv=0xbffff064) at /home/sascha/ssserver/src/ssserver.cpp:49
(gdb) print buffer
$1 = 0
(gdb) frame 0
#0 0xffffe410 in ?? ()
(gdb) step
Cannot find bounds of current function
(gdb) backtrace
#0 0xffffe410 in ?? ()
Zunächst einmal: Ja, ich habe mir die anderen Threads, die debuggen mit KDevelop als Thema haben durchgelesen. Leider haben diese mir nicht weitergeholfen.
Das eigentliche Problem:
Leider habe ich bis jetzt mehr unter Windows mit dem Visual Studio als unter Linux programmiert. Meine Erfahrungen und Herangehensweise beim debuggen beispielsweise versuche ich natürlich abzuleiten. Was mir nicht ganz klar ist: Ich setze einen Breakpoint in einer bestimmten Zeile, dann betätige ich den Knopf "Führt die Anwendung im Debugger aus!". Programm startet, hält aber nicht am Breakpoint an, sondern überspringt diesen. Wenn ich den Breakpoint an einer Stelle platziere, die erst später ausgeführt wird, kann ich die Anwendung anhalten und auch Einzelschritte ausführen um von einer Zeile zur nächsten zu springen. Der Haken: Ich sehe nicht in welcher Zeile ich mich gerade befinde. Ausserdem zeigt mir die Überwachung der Variable nur 0 an oder ein Fragezeichen. Die Meldung: "Keine Quelle: #0 ..." überzeugt mich davon, dass hier was noch nicht stimmt. Nur was? In den configure-Optionen habe ich schon den Parameter "--enable-debug=full" angegeben. Kompiliert wird mit g++ und der Option -g3.
Was habe ich noch übersehen, was mache ich falsch? Ich habe weder in den Manpages, noch über Suchmaschinen oder diesem Forum Antworten auf meine Fragen gefunden. Natürlich ist mir auch klar, dass debuggen nur eine Form des Fehler findens ist. strace oder Ausgaben während der Codeausführung sind mir nicht fremd. Aber Debuggen aus KDevelop halte ich für bequemer und effizienter, wenn ich nicht völlig falsch liege, dass es ungefähr so komfortabel ist wie im Visual Studio. Entschuldigt aber den Vergleich zu Micro$oft-Produkten. Ich hasse sie. Um so wichtiger debuggen unter Linux zu verstehen.
Vielen Dank schonmal
Sascha Bahl
P.S.
KDE 3.4, KDevelop 3.2, ansonsten SuSE 9.3
Auszug der Ausgabe von GDB:
/bin/sh -c /home/sascha/ssserver/debug/libtool gdb /home/sascha/ssserver/debug/src/ssserver -fullname -nx -quiet
(gdb) set edit off
(gdb) set confirm off
*** Warning: inferring the mode of operation is deprecated.
*** Future versions of Libtool will require -mode=MODE be specified.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb)
(gdb)
(gdb) set print static-members off
(gdb) tty /dev/pts/4
(gdb) set width 0
(gdb) set height 0
(gdb) set stop-on 1
(gdb) handle SIG32 pass nostop noprint
(gdb) handle SIG41 pass nostop noprint
(gdb) handle SIG43 pass nostop noprint
(gdb) set print asm-demangle on
(gdb) set output-radix 10
(gdb) cd /home/sascha/ssserver/debug/src
(gdb) break cserversocket.cpp:70
Breakpoint 1 at 0x804903f: file /home/sascha/ssserver/src/cserversocket.cpp, line 70.
(gdb) break cserversocket.cpp:82
Breakpoint 2 at 0x80490ca: file /home/sascha/ssserver/src/cserversocket.cpp, line 82.
(gdb) run
Stopped due to shared library event
(gdb) continue
Stopped due to shared library event
(gdb) continue
Stopped due to shared library event
(gdb) continue
Program received signal SIGINT, Interrupt.
0xffffe410 in ?? ()
(gdb) backtrace
#0 0xffffe410 in ?? ()
#1 0xbfffef98 in ?? ()
#2 0x0804b008 in ?? ()
#3 0xbfffeee0 in ?? ()
#4 0x401d8681 in accept () from /lib/tls/libc.so.6
#5 0x08049220 in CServerSocket (this=0x804b008) at /home/sascha/ssserver/src/cserversocket.cpp:68
#6 0x08048cf7 in main (argc=1, argv=0xbffff064) at /home/sascha/ssserver/src/ssserver.cpp:49
(gdb) print buffer
$1 = 0
(gdb) frame 0
#0 0xffffe410 in ?? ()
(gdb) step
Cannot find bounds of current function
(gdb) backtrace
#0 0xffffe410 in ?? ()