1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

[C] Segmentation Fault Problem

    • Frage
  • davewood
  • 18. Februar 2008 um 19:13
  • Unerledigt
  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 18. Februar 2008 um 19:13
    • #1

    > ./sample
    > Segmentation fault (core dumped)


    Und dass obwohl ich als allererstes Statement ein printf("debug\n") habe.

    Wie geh ich denn am gscheitesten vor das Problem zu finden. Wohin schreibt er den coredump, im aktuellen working directory hab ich ihn nicht gefunden. Anfangen könnte ich allerdings auch nicht viel damit. =)

    Ich hab naemlich ein Patchfile bekommen dass im autoconf einiges umgestellt hat, im Source allerdings praktisch nichts. Vorher gings, nun bekomm ich den segfault.

    Über Hilfe bin ich sehr dankbar, weil meine Augen brennen schon vom reinstarren in den Monitor.

    I like Toast!

  • jeuneS2
    11
    jeuneS2
    Mitglied
    Reaktionen
    17
    Punkte
    1.227
    Beiträge
    238
    • 18. Februar 2008 um 19:19
    • #2

    Was sagt gdb bzw. der Debugger deines Vertrauens?

    Why bother spending time reading up on things? Everybody's an authority, in a free land.

  • Spike101
    2
    Spike101
    Mitglied
    Punkte
    20
    Beiträge
    4
    • 18. Februar 2008 um 21:29
    • #3

    Hmm probier mal fflush(stdout); nach dem printf.. Vllt verschluckt er das nur weil er so schnell abstürzt.. :)

  • Zentor
    16
    Zentor
    Mitglied
    Reaktionen
    5
    Punkte
    2.710
    Beiträge
    506
    • 18. Februar 2008 um 21:42
    • #4

    fprintf(stderr,"TEST"); sollte auch funktionieren
    mfg Oliver

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 18. Februar 2008 um 21:44
    • #5
    Zitat

    probier mal fflush(stdout); nach dem printf

    Wenn stdout an ein interaktives Device wie ein Terminal geht, ist es nicht "fully buffered", sondern "unbuffered" oder "line buffered". Dabei bedeutet "unbuffered", daß Zeichen sofort ausgegeben werden, und "line buffered", daß sie spätestens bei einem Newline ausgegeben werden. In obigem Beispiel muß "debug" also sofort auf dem Bildschirm erscheinen.

    (Ja, ich bin ein Geek.)

    Zum Thema hätt ich auch einen Debugger vorgeschlagen, bzw. ein sehr gründliches make clean und alles neu bauen. Falsch gelinkte Files können sehr seltsame segfaults verursachen, die auch Debugger verwirren.

    Und wo in meinem Ubuntu die cores landen, wüßt ich auch gern...

    *plantsch*

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 18. Februar 2008 um 22:56
    • #6

    ein fflush(NULL) hab ich bereits gemacht bevor ich das posting schrieb.

    wenn der Parameter NULL ist werden alle offenen Dateideskriptoren geflushed.

    gdb werd ich mir wohl endlich anschaun muessen =)

    Hab ebenfalls Ubuntu am rennen btw.

    der Source is frisch ausm SVN ausgecheckt, patch drüberlaufen lassen, autoconf und dann make, also nix mit Dateileichen.

    Kann evt die Reihenfolge in der die libs an den Linker übergeben werden einen Segfault zur Folge habe?

    I like Toast!

  • jeuneS2
    11
    jeuneS2
    Mitglied
    Reaktionen
    17
    Punkte
    1.227
    Beiträge
    238
    • 18. Februar 2008 um 23:11
    • #7
    Zitat von Plantschkuh!

    Und wo in meinem Ubuntu die cores landen, wüßt ich auch gern...

    "ulimit -c unlimited" sollte helfen.

    Why bother spending time reading up on things? Everybody's an authority, in a free land.

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 19. Februar 2008 um 01:10
    • #8
    Zitat von jeuneS2

    "ulimit -c unlimited" sollte helfen.


    Sollte, tuts aber nicht. (Und ist auch die default-Einstellung.)

    Mittlerweile mühsam zusammengereimt: Aktuelle Ubuntus schicken coredumps durch ein Python-Skript, das ungern coredumps von Programmen macht, die nicht in /usr wohnen und daher nicht zu einem Package gehören. Es ist zwar vorgesehen, daß auch coredumps für User gemacht werden, aber nur, wenn eine mysteriöse Umgebungsvariable CORE_REAL_RLIM vom Kernel dies erlaubt, und die ist zumindest bei mir auf 0 gesetzt, obwohl der Wert -1, also unlimited, wünschenswert wäre.

    davewood: Wenn du es dir antun willst und kannst, ändere in /usr/share/apport/apport um Zeile 290 herum (such nach "likely_packaged") den Code des if-Statements auf sowas:

    Code
    # changed this section to make sure we also get core dumps for
        # non-package programs---we might want to debug our own applications!
        if not apport.fileutils.likely_packaged(info['ExecutablePath']):
            # error_log('executable does not belong to a package, ignoring')
            error_log('executable does not belong to a package, dumping anyway')
            # check if the user wants a core dump
            drop_privileges(pid)
            # write_user_coredump(pid, cwd, core_ulimit, elfhead)
            write_user_coredump(pid, cwd, None, elfhead)
            sys.exit(1)


    D.h. das dritte Argument an write_user_coredump auf None ändern, das ignoriert diese CORE_REAL_RLIM-Variable und schreibt dir im aktuellen Verzeichnis einen coredump in core.PID.

    *plantsch*

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 19. Februar 2008 um 01:16
    • #9

    Mit "-g" compilieren (bzw. --debug oder so ähnlich im configure Script, wenn es eines gibt)
    gdb ./sample
    run
    bt
    Dann solltest du mehr sehen.

    Dipper dipper dii dipper dii dipper dii duuu

  • jeuneS2
    11
    jeuneS2
    Mitglied
    Reaktionen
    17
    Punkte
    1.227
    Beiträge
    238
    • 19. Februar 2008 um 09:26
    • #10
    Zitat von Plantschkuh!

    Sollte, tuts aber nicht. (Und ist auch die default-Einstellung.)

    Seltsam, seltsam. Unter Xubuntu funktionierts damit einwandfrei.

    Why bother spending time reading up on things? Everybody's an authority, in a free land.

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 19. Februar 2008 um 10:15
    • #11

    Hier die Kompilier- und Linkanweisungen falls das was bringen sollte.

    Werd mich gleich mal an Sauzachns Tipp wagen

    Code
    david@pcdt:~/ndoutils-1.4b7-oracle/liboci/src$ make
    gcc -g -O2 -fPIC -I/home/david/ndoutils-1.4b7-oracle/liboci/lib/oracle_instantclient_10_2-32/include -I../../liboci/include  -DHAVE_CONFIG_H -I../../include -I../../include -I../../liboci/include  -DHAVE_CONFIG_H -I../../include -I../../include -I../../liboci/include  -c -o sample.o sample.c
    gcc -g -O2 -fPIC -I/home/david/ndoutils-1.4b7-oracle/liboci/lib/oracle_instantclient_10_2-32/include -I../../liboci/include  -DHAVE_CONFIG_H -I../../include -I../../include -I../../liboci/include  -DHAVE_CONFIG_H -I../../include -I../../include -I../../liboci/include  -c -o liboci.o liboci.c
    ar rcs liboci.a liboci.o
    ranlib liboci.a
    gcc -shared -L/home/david/ndoutils-1.4b7-oracle/liboci/lib/oracle_instantclient_10_2-32/lib -L../../liboci/src  sample.o liboci.a   -o sample

    die C und CPP Flags sind doppelt gemoppelt, komisch.

    I like Toast!

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 19. Februar 2008 um 10:20
    • #12
    Code
    $ gdb ./sample 
    GNU gdb 6.6-debian
    This GDB was configured as "i486-linux-gnu"...
    Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
    
    
    (gdb) run
    Starting program: /home/david/ndoutils-1.4b7-oracle/liboci/src/sample 
    
    
    Program received signal SIGSEGV, Segmentation fault.
    0x80000f06 in __do_global_dtors_aux ()
    
    
    (gdb) bt
    #0  0x80000f06 in __do_global_dtors_aux ()
    (gdb)
    Alles anzeigen

    I like Toast!

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 19. Februar 2008 um 11:23
    • #13

    erm

    ja da fehlen noch total viele linkerflags. hab ich erst jetzt gesehen.

    entweder patch inkorrekt oder ich hab einen mist beim applien vom patch gedreht.

    I like Toast!

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 19. Februar 2008 um 17:05
    • #14

    Der Fehler lag am -shared welches der patch eingebaut hat.

    Mag mir jemand erklaeren warum?

    Zitat


    -shared
    Produce a shared object which can then be linked with other objects to form an executable. Not all systems support this option. For predictable results, you
    must also specify the same set of options that were used to generate code (-fpic, -fPIC, or model suboptions) when you specify this option.[1]

    I like Toast!

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern