Portál AbcLinuxu, 14. července 2025 00:07


Dotaz: Ladeni C

12.12.2003 23:00 Petr
Ladeni C
Přečteno: 125×
Odpovědět | Admin
Potreboval bych odladit program, ktery uz ma stovky radku. Porad mi to pise Neopravneny pristup do pameti (SIGSEGV). A nemuzu prijit, ani na to, ve kterych mistech to chybuje. Podle knizky Pavla herouta Ucebnice jazyka c II.dil, kde se zminuje o ladeni. Uvadi ze pri zhavarovani programu system vypise Segmentation faulut(core dumped) a vytvori soubor core. Pomoci programu dbx (nebo necim podobnym) se da vypsat, kde program zhavaroval. Jenomze me to nikdy soubor core nevytvori. Da se to nejak explicitne zadat?? (zkousel jsem ddd, ale moc mi nepomohl). Popripadne mohli by ste mi doporucit nejaky program, nebo poradit nejake postupy. Diky
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

12.12.2003 23:12 MarSik | skóre: 16 | Brno
Rozbalit Rozbalit vše Ladeni C
Odpovědět | | Sbalit | Link | Blokovat | Admin
No takze debugery: gdb, ddd Testovani programu na chybny zapisy/cteni z pameti: valgrind nastavovani core: ted si presne nevzpominam, ale bylo to popsane na root.cz v serialu o gdb A samozrejme pro ucely ladeni vsechno prekladat s -g volbou.
Nothing is foolproof...fools are very clever.
13.12.2003 00:05 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Ladeni C
Odpovědět | | Sbalit | Link | Blokovat | Admin
ddd by ti měl pomoci velmi, nic víc klikacího už není -- prostě v něm ten program spusť a on spadne v něm a budeš ho tam moci ladit, ani nepotřebuješ coredump (pro gdb platí totéž) BFUoidní distribuce mají coredumpy defaultně vypnuté, musíš si je povolit pomocí ulimit -c unlimited.
13.12.2003 13:47 Petr
Rozbalit Rozbalit vše Ladeni C
Ja nemusim mit ani tak moc klikaci veci, nepohrdny zadnym dobrym pomocnikem, at je v gravice, ci v textu, jenomze DDD se mi zastavi po dvacatem pruchodu na malloc - coz nechapu - pameti je dosti a vypise: Program received signal SIGSEGV, Segmentation fault.
13.12.2003 14:09 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Ladeni C
Pokud např. uvloníš tentýž blok paměti dvakrát, běžně to chcípe v malloc() -- pro takové situace je lepší použít valgrind.
13.12.2003 14:15 Petr
Rozbalit Rozbalit vše Ladeni C
COZE ?? - to snad ne. Valgrid - je funkce nebo ladici program ??? Sedim nad tim uz nekolik hodin a nejsem schopnej tu chybu najit. :o(
13.12.2003 14:22 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Ladeni C
To snad ne. Kdyby o něm nepsal už MarS v první odpovědi, a kdyby neexistoval Google, který na něj spolehlivě vyhodí odkaz...
13.12.2003 14:52 Petr
Rozbalit Rozbalit vše Ladeni C
Tak se nezlob, zacinam si pomalu pripadat jako natahovaci opicka, vsechno zkousim prochazet znovu a znovu a porad nemuzu nigde nic najit, co by bylo logicky spatne. Diky za pomoc.
13.12.2003 15:02 Beda
Rozbalit Rozbalit vše Ladeni C
Odpovědět | | Sbalit | Link | Blokovat | Admin
su -
"heslo"
ulimit -Hc unlimited
ulimit -Sc unlimited
gcc -g neco_segfaultujiciho.c -o neco_segfaultjiciho
./neco_segfaultujiciho
gdb -core=./core.12345 ./neco_segfaultujiciho
bt
quit
13.12.2003 15:26 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Ladeni C
Mno, -Hc unlimited je k ničemu, hard limit lze jen snižovat, pokud ti root dá do /etc/profile hard limit, tak si ani neškrtneš. A uvedený postup je dobrý na normální chyby, ale v případě dvakrát uvolněné paměti a spol., které vedou k pádům v _malloc_consolidate() nebo někde poblíž, je celkem na prd, protože to už je dávno pozdě. Je zapotřebí memory debugger (nebo důkladná kontrola logiky programu), který zjistí chybu, když k ní dojde, a valgrind je na to dost dobrý.
13.12.2003 15:31 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Ladeni C
Jo aha, ty tam máš na začátku ,,su -``, tak to s ulimitem beru zpět, ale spouštět něco, o čem vím, že to nefunguje, jako root... debugguji raději jako luser.
13.12.2003 16:05 Petr
Rozbalit Rozbalit vše Ladeni C
Odpovědět | | Sbalit | Link | Blokovat | Admin
DIKY DIKY DIKY vam vsem, ze ste se obtezovali mi poradit. Pomoci (nejen) valgrindu (ale hlavne nej) se mi to snad podarilo odladit - uz to nepada :o) (alespon zatim). Este jednou diky, mejte se ... Petr

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.