suggestion of backtrace in phobos

shinichiro.h hamaji at nii.ac.jp
Sat Dec 9 08:00:35 PST 2006


Hi, all,

I want to suggest the feature of the backtrace for phobos with my
phobos.patch.

http://shinh.skr.jp/tmp/backtrace.zip
http://shinh.skr.jp/tmp/phobos.patch

It supports each of win32 and linux on x86. But the output of the
current implementation is not as good as my hacked phobos
(http://shinh.skr.jp/d/backtrace.zip). I will describe the reason
later.

(Perhaps my discussion is out of date. I'm sorry that I could not
 follow recent discussions about backtrace. And I'm sorry my English
 may be not good. Please ask me if the suggestion is not clear.)

You can try the package like following on Win32,

% dmd.exe throw_test.d -L/Map
% throw_test.exe
Error: err
Backtrace:
00402034 void throw_test.func()
004107f9 _mainCRTStartup
7ee7eede ???
b7ed9567 ???

And on Linux,

% dmd -c throw_test.d
% gcc throw_test.o -o throw_test libphobos.a -lpthread -lm
% nm throw_test > throw_test.nm
% ./throw_test
Error: err
Backtrace:
0804a8f0 void throw_test.func()
0804a8fc _Dmain
0804c42c main

The changes of the phobos are the following:

* add void*[] Exception.backtrace
* add Exception.print(Object)

The member backtrace is the array of addresses. And print(Object) is
the member to show the backtrace. I will describe later of this post
what the argument Object is.

* add internal/backtrace_win32.d
* edit _d_throw in deh.c/deh2.d

Edit Exception.backtrace member in them.

* add std.symtable

I think we cannot choose one backtrace showing strategy. When I am
debugging, I want to get detailed message. But I don't want to get
detailed message in release version since the informations for the
message enlarges the release binary.

We can choose the strategy of showing backtrace using overrided
Symtable.lookupName member. 'othertbl.test.d' in the package is a very
simple example of the overriding.

There is only one strategy in my current implementation of
Symtable. Symtable reads the map file of executable in the current
directory, and show the demangled function name of backtrace. I think
I can implement to show the line number in function like my hacked
phobos. I will implement it if this suggestion is accepted.

And I think the std.symtable module will be also useful for
reflection. See my old work on pseudo reflection:

http://www.digitalmars.com/d/archives/digitalmars/D/8174.html

* edit main in dmain2.d

Add signal handler for linux. And the exception handler search the map
file in the current directory and use it if it is found.


I'm sorry I only changed linux.mak since I'm a linux person. The
Makefile in the package will work only on linux.

This suggestion and my implementation may be not good enough. I'm glad
if I got some comments and modifications.

------------------
 shinichiro.h
  hamaji _at_ nii.ac.jp
  http://shinh.skr.jp/



More information about the Digitalmars-d mailing list