【问题标题】:AS3 -TypeError #1009 - any easy way to find out *which* object reference is null?AS3 -TypeError #1009 - 有什么简单的方法可以找出 *which* 对象引用为空?
【发布时间】:2010-12-03 20:06:50
【问题描述】:

我们时不时都会收到“TypeError #1009 无法访问 null 对象引用的属性或方法” - 没什么大不了的,但有时调试起来令人沮丧。

Flash 为您提供调用堆栈(这是一个开始),但由您自己确定空对象在哪里 - 是否有可能找出 究竟是哪个 引用正在抛出错误?

给定以下(容易出错的)函数:

function nullObjectReferenceError():void
    {
        var obj:Object;
        var prop:* = obj.nonExistentProperty;
    }

而不仅仅是来自 TypeError 的调用堆栈,我想跟踪如下内容:“无法在 obj.nonExistentProperty 处访问空对象引用的属性或方法 em>" - 这有可能吗?

【问题讨论】:

    标签: actionscript-3 error-handling object null


    【解决方案1】:

    显而易见的解决方案是首先停止使用这种容易出错的通用代码。你不应该使用 '*' 类型,并且几乎不应该使用 'Object' 类型。

    要在运行时捕获它,您总是可以说:

    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);
    

    【讨论】:

    • 实际上是 davr,我问是因为我经常被要求调试其他开发人员编写的代码……但这通常是个好建议。
    【解决方案2】:

    如果您在 Flash IDE 的“发布设置”下选中“允许调试”,它会为您提供代码中导致错误的行号。

    【讨论】:

    • 啊 - 越来越近了......仍然无法获取对象,但行号使其更容易找到。你知道“允许调试”是否会对安全或性能产生任何影响吗?
    • 我将此标记为正确 - 它似乎是最接近可用解决方案的方法。
    • 它应该只在你测试/调试时使用。
    【解决方案3】:

    TypeError 不会给你任何更多的信息,如果你抓住它。

    据我所知,没有已知的方法可以实现这一点(即 哪个 对象抛出了错误)。

    最好的办法是在函数的开头设置断点并手动调查变量。我就是这样做的,而且对我来说效果很好。

    【讨论】:

    • 我想了很多 - 我使用 TextMate 作为我的代码编辑器,所以设置断点有点繁琐 - 我希望有其他解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    相关资源
    最近更新 更多