We all get "TypeError #1009 Cannot access a property or method of a null object reference" now and then - no big deal, but sometimes frustrating to debug.
Flash gives you the call stack (which is a start), but leaves it up to you to figure out where the null object is - is it possible to find out exactly which reference is throwing the error?
Given the following (error prone) function:
function nullObjectReferenceError():void
{
var obj:Object;
var prop:* = obj.nonExistentProperty;
}
Rather than just the call stack from the TypeError, I'd like to trace something like: "Cannot access a property or method of a null object reference at obj.nonExistentProperty" - Is this even possible?
If you check Permit Debugging under Publish Settings in the Flash IDE, it gives you the line number in your code causing the error.
The obvious solution is to stop using such generic error-prone code in the first place. You should never use '*' type, and almost never should use 'Object' type.
To catch it at runtime, you could always say:
if(obj == null)
throw new Error("null obj passed in!!");
if(obj.nonExistentProperty == null)
throw new Error("obj doesn't have the prop!! the obj was: "+obj);
TypeError
will not give you any more information if you catch it.
As far as I know, there is no known way to achieve this (i.e which object threw the Error).
Your best bet will be to set a breakpoint in the beginning of the function and investigate the variables manually. That's what I do, and that works fairly well for me.