Error Message useless

janderson askme at me.com
Sat May 10 17:04:00 PDT 2008


janderson wrote:
> Nick Sabalausky wrote:
> <snip>
>> If you're not familiar with the trick of debugging output statements, 
>> it's like this: Start with main() and sprinkle normal output 
>> statements through it. For instance, if your main() is like this:
>>
>> void main()
>> {
>>    someFunc();
>>    if(something)
>>        doSomething();
>>    anotherFunc();
>>    yetAnotherFunc();
>> }
>>
>> Then do this:
>>
>> void main()
>> {
>> Stdout("1").newline;
>>    someFunc();
>> Stdout("2").newline;
>>    if(something)
>>    {
>> Stdout("3").newline;
>>        doSomething();
>> Stdout("4").newline;
>>    }
>> Stdout("5").newline;
>>    anotherFunc();
>> Stdout("6").newline;
>>    yetAnotherFunc();
>> Stdout("7").newline;
>> }
>>
>> Obviously, copy/paste helps there ;) Run that and you'll get something 
>> like:
>>
>> 1
>> 2
>> 5
>> tango.core.Exception.IllegalArgumentException: Argument not valid
>>
>> In this case, we know the if() ended up false and "doSomething()" was 
>> skipped, and we also know the exception was thrown somewhere in 
>> "anotherFunc()". So rip those "Stdout's" out of there, and do the same 
>> thing in "anotherFunc()". Keep drilling down like that until you find 
>> the problem.
>>
>> I do that all the time in my own code (because so far I've been too 
>> lazy to actually get a debugger set up with D :) ).
>>
>>
> 
> Here's a tip:
> 
> Use: __FILE__, __LINE__ in your arguments.  That way you don't need to 
> keep changing the value.
> 
> I bet one could write a mixin that would do this automatically and you'd 
> simply wrap each function in that mixin.
> 
> -Joel

On further thought that might not work.  I'm not sure what would be in 
__FILE__ and __LINE__.  However the mixin could still print out the 
actual code that was just before the ";".

-Joel



More information about the Digitalmars-d mailing list