On Fri, Jun 7, 2013 at 12:39 AM, nazriel <spam@dzfl.pl> wrote:
On Thursday, 6 June 2013 at 21:50:58 UTC, Timothee Cour wrote:
Great!
two issues (on OSX at least):

A)
it seems the top-most element of the call stack gets chopped off; eg in
your code, the main_module.main symbol will not appear in the stack trace.
Any idea why or how to fix that?
Is that some inlining issue ? I tried with dmd -g, or -gs or -gc.
This can be annoying when the top-most function is a large function and
it's not at all clear where the code stopped.

I haven't got Mac OSX to test it out but I fixed it a little bit so it is less hacky:

http://dpaste.dzfl.pl/241c6fb5

Thanks, ya, the demangling part is the easy part :) (although demangle is still incomplete in many cases...)

 
Compiler switches you may want to consider are:
-gc -L--export-dynamic -O0

export-dynamic or rdynamic are not available on OSX.
-gc doesn't change anything on dmd (and -O0 isn't available on dmd)
-gc -O0 doesn't change anything on ldc

 


B)
there are no line numbers. I did a complex workaround by launching a
process and calling atos to get those, but isn't there a better way?

Yeah, it is a complex issue. There are 2 ways to fix it from what I know.
1) pipe addresses to addr2line - easier

OSX doesn't have addr2line, hence my solution based on piping to atos on OSX. It works except in a few cases where for some reason only the basename of the file is shown instead of full file path, but its a bit complex so i was hoping for simpler.

 
2) use libdwarf - more complex but also more out-of-box solution

Thanks for the link, that sounds promising! Will look at it.
under doc:
http://sourceforge.net/apps/trac/elftoolchain/wiki/libdwarf
relevant sections:
"Line Number Operations"