debuggen beim gcc



  • Hi Leute,

    kleine Frage mit gorßer Wirkung.

    Seit kurzer Zeit benutze ich auch mal Linux, um ein C-Programm zu erstellen. Um dies zutun benutze ich den gcc Compiler.
    Nur habe ich damit ein kleines Problem.
    Denn ich habe mal vor längerer Zeit einen Quellcode in ANSI C geschrieben und möchte diesen jetzt mal unter Linux compilieren. Doch leider gelingt mir das nicht so ganz.
    Die Befehl habe ich schonmal alle nachgeschlagen, die sind es nicht, denn diese sind alle Unix tauglich.
    Das komische bei der Aktion ist, das der gcc nur ein oder zwei Warnungen hergibt, aber wenn ich das Programm starten will, es gleich mit einem Speicherzugrifffehler abschmiert.
    Darum nun mal die Frage an die Profies, wie und mit was kann ich denn bei Linux debuggen, um vielleicht so auf dem störenden Quelltext/Befehl zu gelangen. Denn solangsam bin ich mit meinem Latein am Ende, denn der Quellcode läuft unter Windows ohne Problem...

    Danke für jede n Tipp...



  • Der Debugger heißt gdb.

    Compilieren mit Parameter -g für Debug-Infos: g++ -g -Wall -W -o datei datei.cpp
    Dann mit dem debugger starten: gdb datei
    und run eintippen.
    Wenns dann abgeschmiert ist kannst du zB. 'backtrace' eingeben um zu schauen wo's passiert ist.

    Ansonsten gibts auch noch IDEs wie KDevelop die dir ein grafisches Frontend für den gdb geben.

    btw, wenn es sich bei den Warnungen nicht um falsche Warnungen handelt (also zB. Shadow-Meldungen wo garnicht geshadowed wird), dann sollte man sich ran machen und die Warnungen beseitigen.



  • ok das mit dem gdb habe ich hinbekommen, aber was mache ich, wenn dieser mir soetwas vor die füße wirft:
    Program received signal SIGSEGV, Segmentation fault.
    0x4008a943 in __uflow () from /lib/libc.so.6
    (gdb) backtrace
    #0 0x4008a943 in __uflow () from /lib/libc.so.6
    #1 0x40074c0f in _IO_vfscanf () from /lib/libc.so.6
    #2 0x40074f15 in vfscanf () from /lib/libc.so.6
    #3 0x40074f4d in fscanf () from /lib/libc.so.6
    #4 0x0804adea in dateieinlesenFILM () at wirk.c:1017
    #5 0x080487f6 in main () at wirk.c:29
    #6 0x400384a2 in __libc_start_main () from /lib/libc.so.6

    ich kann leider nicht soviel damit anfangen.

    Wer kann mir weiterhelfen... Danke...



  • #3 0x40074f4d in fscanf () from /lib/libc.so.6
    #4 0x0804adea in dateieinlesenFILM () at wirk.c:1017
    #5 0x080487f6 in main () at wirk.c:29

    In Zeile 29 springt dein Programm in die Funktion dateieinlesenFILM.
    In Zeile 1017 (!?!) rufst du offenbar fscanf auf. Da scheint's wohl zu hapern.


Anmelden zum Antworten