[elektro] Szegmentálási hiba

Zoltan Gyarmati profikam at gmail.com
Wed Feb 12 12:38:44 CET 2014


s/unlimit/ulimit/

(nem kotekedesbol, csak a guglizast segitendo :)

On 12.02.2014 12:34, SZIGETI Szabolcs wrote:
> Hali!
>
> Core dump szerintem csak ezért nincs, mert be van állítva, hogy ne legyen
> (unlimit paracs, core file size nulla szerintem).
> A szegmentálási hiba során a program a SIGSEGV signált fogja kapni, ennek
> az alapértelmezése az, hogy kilövi a progit.
> Ennek megakadályozására signal kezelőt kell erre a signalra raknod. Erre
> régen a signal, manapság a sigaction rendszerhívás szolgál. Írsz egy
> függvényt, amit szeretnél, ha végrehajtódna, ha jön a signal.
> Ezt a fenti rendszerhívással az adott signalra tudod rakni mint kezelő,
> innentől kezdve nem a default dolog fog történni, hanem lefut ez a fv, ha
> jön a signal.
> Ugyanígy tudod kezelni pl. a CTRL-C nyomást is, hogy rendezetten álljon le
> a program.
> A SOGKILL és a SIGSTOP kivéltelével minden signalra tudsz saját kezelőt
> írni.
> A siganl() rendszerhívás egyszerűbb, de van pár hátránya, pl. többszörös
> signalok kezelésénél, stb. A sigaction() összetettebb, de jobban működik.
> El tudom képzelni, hogy neked jelen esetben a signal is jó, mert gondlom
> úgyis kilépteted aztán a programot.
> A net tele van példákkal, egy-az-eygben használhatod őket,
>
> De elleneben javasolnám először az egyszerűbb utat. Engedélyezd a
> core-dumpot és az alapján debuggold aprogramot. Ha elhasalt, elviszed a
> core filet, és a gdb-vel vagy annak valamilyen grafikus verziójával szépen
> meg tudod nézni, hogy mit történt a kérdéses esetben.
> Nagyon hasznos dolog core file-t debuggolni, érdemes a technikáját
> megtanulni.
>
> Szabolcs
>
>
>
> .
>
>
> 2014. február 12. 11:27 Acs Gabor írta, <levlista at e8e.eu>:
>
>> Szia, igen, az oprendszer stimt.
>>
>> Ilyen súlyos hibák szerencsére nem jönnek (core dump). Kérhetnék egy kis
>> oktatást, hogy hogyan kell ezt a programban megvalósítani? Szegmentálási
>> hibát ír ki, amikor kilövi a programomat, ezt milyen signalok
>> kezelésével lehet megfogni?
>>
>> Gábor
>>
>> 2014.02.12. 11:10 keltezéssel, SZIGETI Szabolcs írta:
>>> Hali!
>>>
>>> Milyen oprendszer?
>>> Unix és társai alatt csak a a SIGKILL és a SIGSTOP signal nem kezelhető
>> le,
>>> minden más igen. Nekem a SIGSEGV-et kell kezelni, ami defaultban core
>> dump
>>> és halál, de beállíthatsz más kezelőt.
>>> Lásd sigaction() hívás.
>>>
>>> Szabolcs
>>>
>>>
>>>
>>>
>>> 2014. február 12. 10:57 Acs Gabor írta, <levlista at e8e.eu>:
>>>
>>>> Sziasztok!
>>>>
>>>> A C program ha elszáll szegmentálási hibával, azt meg lehet fogni egy
>>>> belső hibakezeléssel, vagy úgyse fogja hagyni az oprendszer, és
>>>> mindenképp kirúgja?
>>>>
>>>>
>>>> --
>>>> Gábor
>>>>
>>>> -----------------------------------------
>>>>            elektro[-flame|-etc]
>>>>
>>> -----------------------------------------
>>>            elektro[-flame|-etc]
>>>
>> -----------------------------------------
>>           elektro[-flame|-etc]
>>
> -----------------------------------------
>           elektro[-flame|-etc]



More information about the Elektro mailing list