It seems to me that a lot of my debugging time is spent chasing down null-reference exceptions in complex statements. For instance:
For Each game As IHomeGam
A couple of things...
1) when you make your own exceptions keep this in mind (if you are annoyed it it for this someone else will be annoyed at you if you do it for something else). Given that the exception path should not at all be the typical path the time spent making the exception have useful information is well worth it.
2) as a general programming practive adopt this style and you will have far less issues (yes your code will be longer in terms of lines, but you will save a lot of time):
a) never do a.b().c(); do x = a.b(); x.c(); (on separate lines) that way you can see of a was null or if the return of a.b() is null.
b) never pass the return of a method call as a parameter - always pass variables. a(foo()); should be x = foo(); a(x); This one is more for debugging and being able to see the value.
I don't know why environments like .net and Java do not provide a version of the runtime that does have more information on these sorts of exceptions, such as what the index was on an array out of bounds, the name of the variable when it is null, etc...