NotNull pointers
Steven Schveighoffer
schveiguy at yahoo.com
Wed Aug 31 13:19:38 PDT 2011
On Wed, 31 Aug 2011 16:02:56 -0400, Walter Bright
<newshound2 at digitalmars.com> wrote:
> On 8/31/2011 4:46 AM, Steven Schveighoffer wrote:
>> Seg faults are not as useful as asserts. It's a fact.
>
> You might be surprised, then, that I'll often temporarily replace an
> assert with a HLT instruction so I can use a debugger on it :-)
Not at all. If you prefer that mode of debugging, that's fine. But if I
have 150 systems running a program I wrote, and one of them fails every
week (random which one, and length of time), you'd better bet I'm going to
prefer a stack trace to a seg fault. I don't want to wait another week +
install debuggers on each of those systems.
When I said Seg faults are not as useful as asserts, I meant *unplanned*
seg faults. If you plan for a seg fault to occur, (or even an assert) you
can use a debugger to capture it.
>> If you have a seg fault,
>> you must reproduce the error while in a debugger, or generate a core
>> dump.
>> Reproducing not be possible, or might take considerable time. Any
>> argument
>> against this is revisionist history. Yes, if I go back in time and run
>> it in a
>> debugger for that execution, it would be useful. Yes, if I go back in
>> time and
>> change my shell options to generate a core dump, it would be useful. If
>> you have
>> an assert, you get a stack trace, no need to reproduce the assert in a
>> debugger,
>> or enable non-default settings in your shell. It just gives you the
>> information
>> you need.
>
>
> It's also possible for the program to have its own seg fault handler
> that reads its own symbolic debug info and generates a line number and
> stack trace. There was a patch to Phobos that did this a while back.
This would also be a valid option. I have no idea why that wasn't
included. Do you?
> Optlink's register dump on a seg fault is not Windows' doing, it
> installs a seg fault handler which does this.
I predominantly use Linux, so Optlink/Windows tools really don't help. D
is supposed to support all OSes not just be useful on Windows.
On linux, the shell options are what determine whether the OS generates a
core dump, and by default they are off. It also does not hook seg faults
to start a debugger by default, it just says "Segmentation Fault" on the
command line and gives you a prompt. Useless.
> > So 4 instructions per assert of a class reference (which is arguably
> not common) is a lot of bloat?
>
> 15 bytes. And yes, this stuff adds up surprisingly quickly, especially
> if you're the type that wants to leave the asserts on even in release
> mode.
How is this possible? I thought release mode removed asserts?
Currently, the empty main() program is 256k. Add in writeln("hello,
world") and it adds 500k. Even if I had 10,000 asserts in there for
objects, that adds 150k.
I think bloat can't possibly be a valid concern here.
Besides, you ignored my comment about how we can eliminate the bloat.
Care to respond?
-Steve
More information about the Digitalmars-d
mailing list