actionscript-3 – 如何调试运行时堆栈下溢错误?
我正在努力解决我正在获得的堆栈下溢.我在运行时得到的回溯是:
VerifyError: Error #1024: Stack underflow occurred. at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at flash.net::URLLoader/onComplete() 这是特别难以调试,因为当我在调试模式下运行它根本不会发生.它只在编译为发行版时发生. 有没有人有任何提示如何调试堆栈下溢?对Flash有什么意义吗? 如果它有帮助,当我单击处理程序进行RPC调用的按钮(使用URLLoader,AsyncToken)然后调用与AsyncToken关联的一组AsyncResponder实例时,会发生此错误.通过某些服务器端日志记录以及某些日志记录被黑客入侵到swf,我知道UrlLoader正在成功执行并获取一个crossdomain.xml文件,正确处理它(即:如果我破坏它,我得到一个安全性错误),并且还成功完成了“加载”请求(服务器发送数据).事件似乎发生在底层事件.COMPLETE侦听/处理过程(当然也是由追溯所暗示的). mxmlc used = from flex_sdk_4.5.0.20967 示例播放器(我已经尝试了几个)= 10.2.153.1 更新:我的具体问题解决了…但我正在离开问题,因为我想知道如何一般调试这样一个问题,而不是只是得到我的具体解决方案. 在我的代码中,我有以下应用程序定义: <s:Application height="100%" width="100%" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" initialize="InitData();"> 请注意,代码已被附加到initialize事件. InitData()和相关定义是: import classes.RpcServerProxy; public var SP:RpcServerProxy; public function InitData():void { SP = new RpcServerProxy("http://192.168.1.102:1234"); } 当我将InitData()调用切换到onCompletion事件而不是初始化(感谢J_A_X!)时,问题完全消失了.似乎发生的事情是Event.COMPLETE事件处理程序(堆栈跟踪中的onComplete)正在使用全局SP对象.关于release(vs debug)的编译一定是影响SP变量初始化的启动时间.稍后将处理程序移动到onCompletion事件解决了所有问题. 如上所述,我仍然想知道什么样的技巧/工具可用于调试这样的初始化问题. 更新2: applicationComplete似乎是一个比creationComplete更好的事件来放置应用程序初始化代码.请参阅this blog entry的一些解释,以及this video(大约4:25)由Adobe Tech Evangelist提供了一个简单的“开始应用”数据初始化的例子. 解决方法
堆栈下溢基本上意味着编译器搞砸了.
你可以使用SWFWire Inspector来查看事件处理程序的字节码,如果你想知道它是如何搞砸的.您也可以使用SWFWire Debugger查看哪些方法被调用,但在这种情况下,您已经知道发生了哪些方法. 如果你发布破碎的swf,我可以给你更多的信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |