flash - ActionScript Compiler UncaughtErrorEvent -
after using asc2 compile air application, found error stack trace missing while catching uncaughterrorevent.
here example code:
var root:sprite = this; root.loaderinfo.uncaughterrorevents.addeventlistener(uncaughterrorevent.uncaught_error,errorhandle); throw new error("test"); protected function errorhandle(event:uncaughterrorevent):void { var message:string; if (event.error error) { message = error(event.error).message; message+="\n"+error(event.error).getstacktrace(); } else if (event.error errorevent) { message = errorevent(event.error).text; } else { message = event.error.tostring(); } }
while using asc1, can see full stack trace in error handle. using asc2, empty stack trace.
anyone have same problem?
how uncaughterrorevent stack trace?
don't cast event.error
error
, in:
error(event.error).getstacktrace()
getting error's stack trace returns call stack error @ time of error's construction string. note line number of stack trace line of cast.
instead, call getstacktrace()
event.error
, in:
event.error.getstacktrace()
there's nothing significant on stack per example.
adding recursion helps demonstrate issue:
package { import flash.display.sprite; import flash.events.uncaughterrorevent; public class exceptiontest extends sprite { public function exceptiontest() { super(); loaderinfo.uncaughterrorevents.addeventlistener(uncaughterrorevent.uncaught_error, uncaughterrorhandler); recursion(); } protected function recursion(depth:uint=0):void { if (depth == 5) throw new error("test"); else recursion(++depth); } protected function uncaughterrorhandler(event:uncaughterrorevent):void { trace(event.error.getstacktrace()); } } }
...would produce:
error: test @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:19] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:13] [swf] users:jsturges:dev:flash-workspace:x:bin-debug:exceptiontest.swf - 1,745 bytes after decompression error: test @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:19] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:13]
if uncaughterrorhandler()
changed example casting error
, in:
protected function uncaughterrorhandler(event:uncaughterrorevent):void { trace(error(event.error).getstacktrace()); }
the debugger catches exception, getstacktrace
line of cast:
error: test @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:19] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest/recursion()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:21] @ exceptiontest()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:13] [swf] users:jsturges:dev:flash-workspace:x:bin-debug:exceptiontest.swf - 1,519 bytes after decompression error: error: test @ exceptiontest/uncaughterrorhandler()[/users/jsturges/dev/flash-workspace/x/src/exceptiontest.as:26]
there may nuances marshaling as1 , as2 as3 supports uncaughterrorevent
starting @ flash player 10.1.
beyond that, assure appropriate debug player per actionscript version. in non-debugger version of runtime error.getstacktrace()
method returns null
.
Comments
Post a Comment