Re: helpful runtime error messages
On Tue, 14 Dec 2010 10:13:03 -0800 Jonathan M Davis jmdavisp...@gmx.com wrote: On Tuesday, December 14, 2010 09:48:14 spir wrote: Hello, Am I the only one who gets, as only kind of runtime errors, spectacularly helpful messages like: int f () {return 0;} void main () { assert (f() == 1); } == s...@o:~/prog/d/Text$ ./__trials__ core.exception.asserter...@__trials__(44): Assertion failure ./__trials__() [0x804bb86] ./__trials__() [0x8049642] ./__trials__() [0x804960b] ./__trials__() [0x804bd76] ./__trials__() [0x804bcd0] ./__trials__() [0x804bdba] ./__trials__() [0x804bcd0] ./__trials__() [0x804bc76] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0x292bd6] Thankfully, D is a static language, so that I have rather few runtime errors. But what am I missing to get a stack trace? Sometimes, I don't even have the (last) faulty line of code (dunno why). On Linux, I believe that you need to compile with -L--export-dynamic. I think that that's supposed to be in the version of dmd.conf that comes with the most recent version of dmd, so it should work out of the box (though if you're using an older dmd.conf, then it would be missing). IIRC, stack traces don't work properly on Windows yet (though I don't know exactly what's going on there), so I believe that you're currently out of luck on Windows. However, what you're showing there looks like what you get on Linux if you don't build with -L-- export-dynamic, so I'm guessing that that's your problem. - Jonathan M Davis Thank you, jonathan. (On Linux, yes) I get now for a prog called x.d: s...@o:~/prog/d$ dmd -ofprog -w -debug -unittest -L--export-dynamic prog.d s...@o:~/prog/d$ ./prog core.exception.asserter...@prog(20): Assertion failure ./prog(_d_assertm+0x16) [0x807ca26] ./prog(void prog.__assert(int)) [0x807a4ea] ./prog(_Dmain+0x17) [0x807a4d3] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cc16] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cb70] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cc5a] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cb70] ./prog(main+0x96) [0x807cb16] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0x23bbd6] ./prog() [0x807a3f1] Much better (if not the friendliest output I've ever seen ;-). For the following prog, I get: int element(int[] elements, uint i) {return elements[i];} void main () { int[] elements = [3,2,1]; auto e = elements[9]; } s...@o:~/prog/d$ dmd -ofprog -w -debug -unittest -L--export-dynamic prog.d s...@o:~/prog/d$ ./prog core.exception.rangeer...@prog(20): Range violation ./prog(_d_array_bounds+0x16) [0x807cad6] ./prog(_D4prog7__arrayZ+0x12) [0x807a54a] ./prog(_Dmain+0x38) [0x807a524] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cc76] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cbd0] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807ccba] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cbd0] ./prog(main+0x96) [0x807cb76] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0x1ddbd6] ./prog() [0x807a401] Do you have (even) nicer error reports on some OS's or using some switches? denis -- -- -- -- -- -- -- vit esse estrany ☣ spir.wikidot.com
Re: helpful runtime error messages
On Tue, 14 Dec 2010 13:44:27 -0500 Jesse Phillips jessekphillip...@gmail.com wrote: spir Wrote: Hello, Am I the only one who gets, as only kind of runtime errors, spectacularly helpful messages like: int f () {return 0;} void main () { assert (f() == 1); } == s...@o:~/prog/d/Text$ ./__trials__ core.exception.asserter...@__trials__(44): Assertion failure That is the location of the assertion failure. The stack trace actually needs to have -L--export-dynamic as an argument this should be in the latest dmd.conf file already. Also compile with -gc will help, didn't seem to be required though. -gc does not seems to change anything (symbols are still rather cryptic, with some mangling and hex codes). What is it supposed to do, actually? Denis -- -- -- -- -- -- -- vit esse estrany ☣ spir.wikidot.com
Re: helpful runtime error messages
spir Wrote: For the following prog, I get: int element(int[] elements, uint i) {return elements[i];} void main () { int[] elements = [3,2,1]; auto e = elements[9]; } s...@o:~/prog/d$ dmd -ofprog -w -debug -unittest -L--export-dynamic prog.d s...@o:~/prog/d$ ./prog core.exception.rangeer...@prog(20): Range violation ./prog(_d_array_bounds+0x16) [0x807cad6] ./prog(_D4prog7__arrayZ+0x12) [0x807a54a] ./prog(_Dmain+0x38) [0x807a524] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cc76] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cbd0] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807ccba] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cbd0] ./prog(main+0x96) [0x807cb76] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0x1ddbd6] ./prog() [0x807a401] Do you have (even) nicer error reports on some OS's or using some switches? I believe this is where compiling with -gc (debug info that looks like C) as it should give you line numbers.
Re: helpful runtime error messages
On Wed, 15 Dec 2010 11:54:28 -0500 Jesse Phillips jessekphillip...@gmail.com wrote: spir Wrote: For the following prog, I get: int element(int[] elements, uint i) {return elements[i];} void main () { int[] elements = [3,2,1]; auto e = elements[9]; } s...@o:~/prog/d$ dmd -ofprog -w -debug -unittest -L--export-dynamic prog.d s...@o:~/prog/d$ ./prog core.exception.rangeer...@prog(20): Range violation ./prog(_d_array_bounds+0x16) [0x807cad6] ./prog(_D4prog7__arrayZ+0x12) [0x807a54a] ./prog(_Dmain+0x38) [0x807a524] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cc76] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cbd0] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807ccba] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cbd0] ./prog(main+0x96) [0x807cb76] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0x1ddbd6] ./prog() [0x807a401] Do you have (even) nicer error reports on some OS's or using some switches? I believe this is where compiling with -gc (debug info that looks like C) as it should give you line numbers. It was already compiled with -gc (removing this switch does not change output). I get a line only for top-level call (the number above point to the calling line in main). Denis -- -- -- -- -- -- -- vit esse estrany ☣ spir.wikidot.com
Re: helpful runtime error messages
On Wednesday 15 December 2010 02:28:56 spir wrote: On Tue, 14 Dec 2010 10:13:03 -0800 Jonathan M Davis jmdavisp...@gmx.com wrote: On Tuesday, December 14, 2010 09:48:14 spir wrote: Hello, Am I the only one who gets, as only kind of runtime errors, spectacularly helpful messages like: int f () {return 0;} void main () { assert (f() == 1); } == s...@o:~/prog/d/Text$ ./__trials__ core.exception.asserter...@__trials__(44): Assertion failure ./__trials__() [0x804bb86] ./__trials__() [0x8049642] ./__trials__() [0x804960b] ./__trials__() [0x804bd76] ./__trials__() [0x804bcd0] ./__trials__() [0x804bdba] ./__trials__() [0x804bcd0] ./__trials__() [0x804bc76] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0x292bd6] Thankfully, D is a static language, so that I have rather few runtime errors. But what am I missing to get a stack trace? Sometimes, I don't even have the (last) faulty line of code (dunno why). On Linux, I believe that you need to compile with -L--export-dynamic. I think that that's supposed to be in the version of dmd.conf that comes with the most recent version of dmd, so it should work out of the box (though if you're using an older dmd.conf, then it would be missing). IIRC, stack traces don't work properly on Windows yet (though I don't know exactly what's going on there), so I believe that you're currently out of luck on Windows. However, what you're showing there looks like what you get on Linux if you don't build with -L-- export-dynamic, so I'm guessing that that's your problem. - Jonathan M Davis Thank you, jonathan. (On Linux, yes) I get now for a prog called x.d: s...@o:~/prog/d$ dmd -ofprog -w -debug -unittest -L--export-dynamic prog.d s...@o:~/prog/d$ ./prog core.exception.asserter...@prog(20): Assertion failure ./prog(_d_assertm+0x16) [0x807ca26] ./prog(void prog.__assert(int)) [0x807a4ea] ./prog(_Dmain+0x17) [0x807a4d3] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cc16] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cb70] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cc5a] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cb70] ./prog(main+0x96) [0x807cb16] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0x23bbd6] ./prog() [0x807a3f1] Much better (if not the friendliest output I've ever seen ;-). For the following prog, I get: int element(int[] elements, uint i) {return elements[i];} void main () { int[] elements = [3,2,1]; auto e = elements[9]; } s...@o:~/prog/d$ dmd -ofprog -w -debug -unittest -L--export-dynamic prog.d s...@o:~/prog/d$ ./prog core.exception.rangeer...@prog(20): Range violation ./prog(_d_array_bounds+0x16) [0x807cad6] ./prog(_D4prog7__arrayZ+0x12) [0x807a54a] ./prog(_Dmain+0x38) [0x807a524] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cc76] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cbd0] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807ccba] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cbd0] ./prog(main+0x96) [0x807cb76] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0x1ddbd6] ./prog() [0x807a401] Do you have (even) nicer error reports on some OS's or using some switches? I believe that that's pretty much what stack traces look like at this point. -gc is for adding debugging symbols so that you can use something like gdb, so it shouldn't have any effect on the stack trace. I don't think that there are any compiler switches that will do anything for you with regards to stack traces. - Jonathan M Davis
Re: helpful runtime error messages
spir Wrote: It was already compiled with -gc (removing this switch does not change output). I get a line only for top-level call (the number above point to the calling line in main). Sorry wasn't on a Linux box to test myself. It might have to do with the error occurring in main, so you already get the line number. I had assumed -gc wasn't used since your compile line is: s...@o:~/prog/d$ dmd -ofprog -w -debug -unittest -L--export-dynamic prog.d Anyway that is the best there is.
Re: helpful runtime error messages
On Wed, 15 Dec 2010 13:28:56 +0300, spir denis.s...@gmail.com wrote: s...@o:~/prog/d$ dmd -ofprog -w -debug -unittest -L--export-dynamic prog.d s...@o:~/prog/d$ ./prog core.exception.rangeer...@prog(20): Range violation ./prog(_d_array_bounds+0x16) [0x807cad6] ./prog(_D4prog7__arrayZ+0x12) [0x807a54a] ./prog(_Dmain+0x38) [0x807a524] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cc76] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cbd0] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807ccba] ./prog(extern (C) int rt.dmain2.main(int, char**)) [0x807cbd0] ./prog(main+0x96) [0x807cb76] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0x1ddbd6] ./prog() [0x807a401] Do you have (even) nicer error reports on some OS's or using some switches? Trass3r pointed this http://3d.benjamin-thaut.de/?p=15 recently. It prints line numbers on windows. It doesn't go as deep as stacktrace above though. Just core.exception.rangeer...@strace2(5): Range violation 00 strace2.d::5(16) _Dmain 01 extern (C) int rt.dmain2.main(int, char**) . void runMain() . 02 extern (C) int rt.dmain2.main(int, char**) . void runAll() . 03 main 04 mainCRTStartup 05 RegisterWaitForInputIdle -- Using Opera's revolutionary email client: http://www.opera.com/mail/
helpful runtime error messages
Hello, Am I the only one who gets, as only kind of runtime errors, spectacularly helpful messages like: int f () {return 0;} void main () { assert (f() == 1); } == s...@o:~/prog/d/Text$ ./__trials__ core.exception.asserter...@__trials__(44): Assertion failure ./__trials__() [0x804bb86] ./__trials__() [0x8049642] ./__trials__() [0x804960b] ./__trials__() [0x804bd76] ./__trials__() [0x804bcd0] ./__trials__() [0x804bdba] ./__trials__() [0x804bcd0] ./__trials__() [0x804bc76] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0x292bd6] Thankfully, D is a static language, so that I have rather few runtime errors. But what am I missing to get a stack trace? Sometimes, I don't even have the (last) faulty line of code (dunno why). Denis -- -- -- -- -- -- -- vit esse estrany ☣ spir.wikidot.com
Re: helpful runtime error messages
On Tuesday, December 14, 2010 09:48:14 spir wrote: Hello, Am I the only one who gets, as only kind of runtime errors, spectacularly helpful messages like: int f () {return 0;} void main () { assert (f() == 1); } == s...@o:~/prog/d/Text$ ./__trials__ core.exception.asserter...@__trials__(44): Assertion failure ./__trials__() [0x804bb86] ./__trials__() [0x8049642] ./__trials__() [0x804960b] ./__trials__() [0x804bd76] ./__trials__() [0x804bcd0] ./__trials__() [0x804bdba] ./__trials__() [0x804bcd0] ./__trials__() [0x804bc76] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0x292bd6] Thankfully, D is a static language, so that I have rather few runtime errors. But what am I missing to get a stack trace? Sometimes, I don't even have the (last) faulty line of code (dunno why). On Linux, I believe that you need to compile with -L--export-dynamic. I think that that's supposed to be in the version of dmd.conf that comes with the most recent version of dmd, so it should work out of the box (though if you're using an older dmd.conf, then it would be missing). IIRC, stack traces don't work properly on Windows yet (though I don't know exactly what's going on there), so I believe that you're currently out of luck on Windows. However, what you're showing there looks like what you get on Linux if you don't build with -L-- export-dynamic, so I'm guessing that that's your problem. - Jonathan M Davis
Re: helpful runtime error messages
spir Wrote: Hello, Am I the only one who gets, as only kind of runtime errors, spectacularly helpful messages like: int f () {return 0;} void main () { assert (f() == 1); } == s...@o:~/prog/d/Text$ ./__trials__ core.exception.asserter...@__trials__(44): Assertion failure That is the location of the assertion failure. The stack trace actually needs to have -L--export-dynamic as an argument this should be in the latest dmd.conf file already. Also compile with -gc will help, didn't seem to be required though.