dereferencing null

Steven Schveighoffer schveiguy at yahoo.com
Wed Mar 7 04:42:01 PST 2012


On Mon, 05 Mar 2012 22:51:28 -0500, Jonathan M Davis <jmdavisProg at gmx.com>  
wrote:

> On Monday, March 05, 2012 21:04:20 Steven Schveighoffer wrote:
>> On Mon, 05 Mar 2012 20:17:32 -0500, Michel Fortin
>>
>> <michel.fortin at michelf.com> wrote:
>> > That said, throwing an exception might not be a better response all  
>> the
>> > time. On my operating system (Mac OS X) when a program crashes I get a
>> > nice crash log with the date, a stack trace for each thread with named
>> > functions, the list of all loaded libraries, and the list of VM  
>> regions
>> > dumped into ~/Library/Logs/CrashReporter/. That's very useful when you
>> > have a customer experiencing a crash with your software, as you can  
>> ask
>> > for the crash log. Can't you do the same on other operating systems?
>>
>> It depends on the OS facilities and the installed libraries for such
>> features.  It's eminently possible, and I think on Windows, you can  
>> catch
>> such exceptions too in external programs to do the same sort of dumping.
>> On Linux, you get a "Segmentation Fault" message (or nothing if you have
>> no terminal showing the output), and the program goes away.  That's the
>> default behavior.  I think it's better in any case to do *something*  
>> other
>> than just print "Segmentation Fault" by default.  If someone has a way  
>> to
>> hook this in a better fashion, we can include that, but I hazard to  
>> guess
>> it will not be on stock Linux boxes.
>
> All you have to do is add a signal handler which handles SIGSEV and have  
> it
> print out a stacktrace. It's pretty easy to do. It _is_ the sort of  
> thing that
> programs may want to override (to handle other signals), so I'm not  
> quite sure
> what the best way to handle that is without causing problems for them  
> (e.g.
> initialization order could affect which handler is added last and is  
> therefore
> the one used). Maybe a function should be added to druntime which wraps  
> the
> glibc function so that programs can add their signal handler through  
> _it_, and
> if that happens, the default one won't be used.

Install the default (stack-trace printing) handler before calling any of  
the static constructors.  Any call to signal after that will override the  
installed handler.

-Steve


More information about the Digitalmars-d mailing list