On 03/04/2012 09:43 PM, Adam D. Ruppe wrote:
On Monday, 5 March 2012 at 02:32:12 UTC, Chad J wrote:
I hate hate HATE vague error messages that don't help me.

In a lot of cases, getting more info is very, very easy:

$ dmd -g -debug test9
$ ./test9
Segmentation fault
$ gdb ./test9
GNU gdb (GDB) 7.1
[...]
(gdb) r
Starting program: /home/me/test9
[Thread debugging using libthread_db enabled]

Program received signal SIGSEGV, Segmentation fault.
0x08067a57 in _Dmain () at test9.d:12
12 bar.foo = 5;
(gdb) where
#0 0x08067a57 in _Dmain () at test9.d:12
#1 0x0806eaf8 in _D2rt6dmain24mainUiPPaZi7runMainMFZv ()
#2 0x0806e605 in _D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv ()
#3 0x0806eb3f in _D2rt6dmain24mainUiPPaZi6runAllMFZv ()
#4 0x0806e605 in _D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv ()
#5 0x0806e5b4 in main ()
(gdb) print bar
$1 = (struct test9.Bar *) 0x0



My gdb is out of the box unmodified; you don't need anything
special to get basic info like this.


News to me. I've had bad runs with that back in the day, but maybe things have improved a bit.




There's two cases where null annoys me though:

1) if it is stored somewhere where it isn't supposed to be.
Then, the location of the dereference doesn't help - the
question is how it got there in the first place.


True, but that's a different problem space to me. Non-nullable types would be really cool right about now.

2) Segfaults in the middle of a web app, where running it under
the same conditions again in the debugger is a massive pain in
the butt.


THIS. This is why I expect what I expect. It's not web apps in my case. It's that I simply cannot expect users to run my code in a debugger. That is just /not acceptable/.


I've trained myself to use assert (or functions with assert
in out contracts/invariants) a lot to counter these.

*quiver*
It's not that I don't like assertions, contracts, or invariants. These are very cool. The problem is that they don't help me when I missed a spot and didn't use assertions, contracts, or invariants. Back to spending a bunch of time inserting writefln statements to do something that I should be able to accomplish with my eyeballs and a stack trace pretty much instantaneously.

Reply via email to