problem with exceptions

steven kladitis via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Oct 2 05:45:36 PDT 2015


On Friday, 2 October 2015 at 12:18:36 UTC, Dmitri wrote:
> On Friday, 2 October 2015 at 11:44:21 UTC, steven kladitis 
> wrote:
>> C:\d\examples>pb2
>> =>main's first line
>>   =>makeOmelet's first line
>>     =>prepareAll's first line
>>       =>prepareEggs's first line
>> object.Exception at pb2.d(64): Cannot take -8 eggs from the fridge
>> ----------------
>> 0x00402252
>> 0x0040512F
>> 0x00405043
>> 0x00403E48
>> 0x7600338A in BaseThreadInitThunk
>> 0x77A497F2 in RtlInitializeExceptionChain
>> 0x77A497C5 in RtlInitializeExceptionChain
>>
>>
>> ----- I always see the info at the bottom. Is this normal. I 
>> was thinkig I should only the the exception message itself.
>> ---  this is windows 7 32 bit.
>
> that would the stack of the thread leading up to the exception. 
> I think you get that if you dump the exception object itself 
> (not just the message).

-------------- code is below
import std.stdio;
import std.string;

void indent(in int level)
{
     foreach (i; 0 .. level * 2)
     {
         write(' ');
     }
}
void entering(in char[] functionName, in int level)
{
     indent(level);
     writeln("=>", functionName, "'s first line");
}
void exiting(in char[] functionName, in int level)
{
     indent(level);
     writeln("<=", functionName, "'s last line");
}
void main()
{
     entering("main", 0);
     makeOmelet(-8);
     eatOmelet();
     exiting("main", 0);
}
void makeOmelet(int eggCount)
{
     entering("makeOmelet", 1);
     prepareAll(eggCount);
     cookEggs();
     cleanAll();
     exiting("makeOmelet", 1);
}
void eatOmelet()
{
     entering("eatOmelet", 1);
     exiting("eatOmelet", 1);
}
void prepareAll(int eggCount)
{
     entering("prepareAll", 2);
     prepareEggs(eggCount);
     prepareButter();
     preparePan();
     exiting("prepareAll", 2);
}
void cookEggs()
{
     entering("cookEggs", 2);
     exiting("cookEggs", 2);
}
void cleanAll()
{
     entering("cleanAll", 2);
     exiting("cleanAll", 2);
}
void prepareEggs(int count)
{
     entering("prepareEggs", 3);
     if (count < 1)
     {
         throw new Exception(
                   format("Cannot take %s eggs from the fridge", 
count));
     }
     exiting("prepareEggs", 3);
}
void prepareButter()
{
     entering("prepareButter", 3);
     exiting("prepareButter", 3);
}
void preparePan()
{
     entering("preparePan", 3);
     exiting("preparePan", 3);
}



More information about the Digitalmars-d-learn mailing list