Collateral exceptions seem to be broken
Andrej Mitrovic
andrej.mitrovich at gmail.com
Sun May 8 13:31:30 PDT 2011
import std.stdio;
import std.conv;
import std.exception;
void main()
{
try
{
foo();
}
catch (Exception e)
{
for (Throwable t = e; t !is null; t = t.next)
{
writeln(t);
}
}
}
void foo()
{
try
{
throw new Exception("thrown from foo");
}
finally
{
bar(3);
}
}
void bar(int x)
{
try
{
throw new Exception(text("thrown from bar #", x));
}
finally
{
if (x > 1)
{
bar(x - 1);
}
}
}
DMD 2.052, XP 32bit:
object.Exception at test.d(26): thrown from foo
object.Exception at test.d(38): thrown from bar #3
object.Exception at test.d(38): thrown from bar #2
object.Exception at test.d(38): thrown from bar #1
object.Exception at test.d(38): thrown from bar #3
object.Exception at test.d(38): thrown from bar #2
object.Exception at test.d(38): thrown from bar #1
object.Exception at test.d(38): thrown from bar #2
object.Exception at test.d(38): thrown from bar #1
object.Exception at test.d(38): thrown from bar #1
Simply calling writeln(e) will work:
void main()
{
try
{
foo();
}
catch (Exception e)
{
writeln(e);
}
}
writes:
object.Exception at test.d(27): thrown from foo
object.Exception at test.d(39): thrown from bar #3
object.Exception at test.d(39): thrown from bar #2
object.Exception at test.d(39): thrown from bar #1
However that doesn't help if you want to iterate through the
exceptions one at a time.
More information about the Digitalmars-d
mailing list