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