加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

actionscript-3 – 如何调试运行时堆栈下溢错误?

发布时间:2020-12-15 07:33:51 所属栏目:百科 来源:网络整理
导读:我正在努力解决我正在获得的堆栈下溢.我在运行时得到的回溯是: VerifyError: Error #1024: Stack underflow occurred.at flash.events::EventDispatcher/dispatchEventFunction()at flash.events::EventDispatcher/dispatchEvent()at flash.net::URLLoader/
我正在努力解决我正在获得的堆栈下溢.我在运行时得到的回溯是:

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,我可以给你更多的信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读