ActionScript是否具有等效的"核心转储"?

Tod*_*ski 8 actionscript actionscript-3

这是我的情况:我正在开发一款基于AS3的游戏,我希望有一个"报告问题!" 在游戏中运行,以便用户可以向我提交反馈.

当我的用户报告问题时,我希望尽可能多地了解他们的游戏状态; 基本上是什么对象在内存中,所有这些对象中的所有变量的值是什么; 我在调试器中遇到断点时可以得到的信息基本相同.

有一个简单的方法吗?我担心我会花几天时间尝试写一堆函数来获取所有这些信息给我,但之后有人告诉我,"哦,你为什么不调用ASUtils.getSnapshot()" ?

Stu*_*Stu 7

在AS3中没有通用的方法来转储变量的状态,但我们做了几件你可能会觉得有用的事情:

  1. 捕获最近点击活动的日志.使用stage事件侦听器记录单击并跟踪父链上的对象"path"到舞台.对象路径只是所有DisplayObject名称,如:screenMain.dialogBu​​yItem.buttonBuy
  2. 捕获屏幕截图,将其缩小为小缩略图,对其进行JPEG编码,然后将其与反馈一起上传到您的服务器.当出现异常时我们也会这样做(参见#4).as3corelib具有JPEG编码功能com/adobe/images
  3. 编写一个命令行珍珠或PHP脚本,您可以在发布它之前在AS3代码上运行它将在每个函数调用的顶部注入调用跟踪.这允许记录呼叫历史记录.虽然它不如完整堆栈好,但它会给你一些关于你的代码最近在做什么的指示.
  4. 陷阱断言和未处理的异常,并通过单击活动和呼叫历史记录跟踪将它们记录到您的服务器.未处理的异常侦听器是Flash 10.1中的新增功能,但大多数用户都具有此功能.您可以检查该支持并添加如下监听器:

    // Check for the presence of the Flash 10.1 global Error event (exception) handler class.
    // If it exists, we'll listen for it and it will allow us to report errors to our server.
    if ( loaderInfo.hasOwnProperty( 'uncaughtErrorEvents' ) )
        loaderInfo.uncaughtErrorEvents.addEventListener( "uncaughtError", onUncaughtError ); // UncaughtErrorEvent.UNCAUGHT_ERROR
    
    Run Code Online (Sandbox Code Playgroud)
  5. 如果您要使用反馈记录全局状态变量,则可以编写一个函数将它们转储为字符串,以便通过用户反馈进行上载.虽然您可以使用枚举类和对象属性for each,但这仅适用于公共成员.谷歌周围,你会发现一些人们已经编写的函数使用这个枚举技巧递归转储对象和数组数据.