Line number of Exception instantiation
Fawzi Mohamed
fmohamed at mac.com
Thu Mar 4 12:49:36 PST 2010
On 2010-03-04 21:29:15 +0100, "Nick Sabalausky" <a at a.a> said:
> "bearophile" <bearophileHUGS at lycos.com> wrote in message
> news:hmovte$2431$1 at digitalmars.com...
>> What do you think of the idea of the Exception to remember (so later it
>> can be shown if uncaught) the line number and file name where it was
>> instantiated?
>>
>> void foo() {
>> auto e = new Exception(""); // instantiation line number here
>> throw e;
>> }
>> void main() {
>> foo();
>> }
>>
>> Exceptions get caught, rethrown, stored, etc. But in many cases in my code
>> they are instantiated close to where the cause was. So knowing such line
>> number can be useful (if you are using a debugger this is not so useful).
>>
>> Bye,
>> bearophile
>
> Doesn't tango's exception tracing do that?
sure it does, just import TraceExceptions...
The exception will contain the stacktrace at the throwing point
(adresses)... and with printOut you can get a symbolic trace (if
possible).
I have also tried to have a way to get the trace of all threads
http://github.com/fawzi/blip/blob/master/blip/util/TraceAll.d
it is not perfect, probably I should trade a little bit more of memory
and suspend all threads (instead of one at a time), but it can be
useful when there is a deadlock and you want to see who is the culprit.
that uses signals, so it is unsafe, also it will deadlock if the gc
tries to suspend all threads while tracing, but I find it useful all
the same, so that you don't have to attach a debugger...
Fawzi
More information about the Digitalmars-d
mailing list