hook SIGSEGV
Max Filippov
jcmvbkbc at gmail.com
Wed May 14 18:15:42 EDT 2014
On Wed, May 14, 2014 at 4:14 PM, Kristof Provost <kristof at sigsegv.be> wrote:
> On 2014-05-10 21:46:01 (+0800), net.study.sea at gmail.com <net.study.sea at gmail.com> wrote:
>> I want to know is it possible to hook SIGSEGV to restart the
>> thread which the signal is sent to,without restart the whole
>> process? And record the place where has caused this signal?
>>
> Yes, as others have already pointed out, you can hook SIGSEGV like any
> other signal.
>
> You're not going to be able to save the process any more, but you can
> still collect some useful information.
>
> I've found it very useful to have a SIGSEGV (and SIGPIPE, SIGABRT,
> SIGFPE, SIGILL) handler which logs a backtrace (look at 'man backtrace')
> to syslog. Very useful for debugging on targets where core dumps are
> impractical.
>
> Others have also pointed out that it might no longer be safe to call
> printf() or malloc() there. That's true, but usually it's OK, and if it
> turns out that it wasn't ... Well, you were crashing anyway.
Well, not anyway: you still should be able to take a longjmp out of the
signal handler to a safe place.
--
Thanks.
-- Max
More information about the Kernelnewbies
mailing list