不幸的是,在这一点上你可以做很多事情。显而易见的地方当然是试图让用户在Flash Player的调试版上运行程序。但是,如果你不能,你需要找到一种方式,一个“包罗万象”的一种方式运行时错误检测到“在建”,只有两个直接的补救措施,我能想到的:
在应用程序中的关键点插入默认日志消息。这应该处于更高的抽象层次,可能在创建或删除模块时,或者开始和完成复杂任务时。理想情况下,日志记录也应该是可配置的,以便您可以在需要时打开或关闭详细输出,例如通过更改配置文件或在编译过程中设置环境变量 - 调试代码可能会使您的应用程序变慢一点,并且您不希望每次出现错误时都必须添加和删除单个跟踪语句。如果您是一位高级ActionScript开发人员,您甚至可能希望找到一种通过元数据和/或自定义名称空间实现日志记录的方法 - 这是一种更简洁的方法。
将catch-all approach应用于您的整个应用程序,并追踪堆栈中的每个错误。也许这并不比你已经有的更明确,但至少你可以干净地关闭程序(例如,向用户显示一条消息),而不是让它崩溃。
很不幸,你已经创建你的程序有一个“不要告诉我测试之前,我释放”的态度 - 有只是没有很多事情可以“回想”这样做,除了火调试器,并加入一些额外的时间。事实上,你应该测试每一行代码,然后你甚至会写出它 ......但我不会去 - TDD通常是需要更多解释而不是单个答案的东西。
下面是一些简单的事情可以做,以使你的生活在未来更容易:
的最大的错误,人们普遍提出的,是不要让错误发生在首位:如果,例如,您有许多null
-checks在应用程序代码:
if (myVar != null) doMyStuff(); // or
if (myVar == null) return;
这通常用于防止可怕的#1009错误的显示出来,这是比较有效的,乍一看它比使用try...catch
块更快。但它也将掩盖问题的根源,或者甚至让它不被注意:您的错误可能会在稍后出现,其他地方应该已经在doMyStuff()
中初始化,或者可能有些地方您只是忘记了检查。
成为无差错的最佳策略是:
不返回,或者分配非法值(例如,不要让你的函数返回null
,分配初始值的所有变量等)
执行try...catch
在应用程序中的关键点(无论什么时候出现问题,本质上)。然后,这些会在发现错误时发送详细的日志消息,因此您无需诉诸冗长的调试会话就可以轻松发现原因。
创建自我验证对象。我喜欢有一个verify()
方法,该方法在对象初始化或添加到舞台之前调用,检查所有必需的依赖项 - 如果缺少任何内容或具有错误的值,则会抛出InstantiationException
。
谢谢 - 这些都是好想法。 – 2012-02-11 18:11:52