[elektro] Szegmentálási hiba

Acs Gabor levlista at e8e.eu
Wed Feb 12 13:02:02 CET 2014


Köszönöm! Lényegében ez a válasz az eredeti kérdésemre, a többi 
tanácsotok már bónusz, hab a tortán :)


Gábor

2014.02.12. 12:34 keltezéssel, SZIGETI Szabolcs írta:
> 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