อย่าแปลง event.error
ถึง Error
ดังเช่นใน:
Error(event.error).getStackTrace()
การรับการติดตามสแต็กของข้อผิดพลาดจะส่งคืน call stack สำหรับข้อผิดพลาดในขณะที่สร้างข้อผิดพลาดเป็นสตริง โปรดทราบว่าหมายเลขบรรทัดของการติดตามสแต็กคือบรรทัดของการร่าย
ให้โทร getStackTrace()
จาก event.error
แทน เช่น:
event.error.getStackTrace()
ไม่มีอะไรสำคัญในสแต็กตามตัวอย่างของคุณ
การเพิ่มการเรียกซ้ำช่วยสาธิตปัญหา:
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());
}
}
}
...จะผลิต:
Error: test
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:19]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at 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
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:19]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at ExceptionTest()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:13]
หาก uncaughtErrorHandler()
ถูกเปลี่ยนเป็นตัวอย่างของคุณเป็น Error
ดังเช่นใน:
protected function uncaughtErrorHandler(event:UncaughtErrorEvent):void
{
trace(Error(event.error).getStackTrace());
}
ดีบักเกอร์จับข้อยกเว้น แต่ getStackTrace
เป็นบรรทัดของการส่ง:
Error: test
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:19]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at ExceptionTest/recursion()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:21]
at 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
at ExceptionTest/uncaughtErrorHandler()[/Users/jsturges/dev/flash-workspace/X/src/ExceptionTest.as:26]
อาจมีความแตกต่างในการจัดเรียง AS1 และ AS2 เป็น AS3 ซึ่งรองรับ UncaughtErrorEvent
เริ่มต้นที่ Flash Player 10.1
นอกเหนือจากนั้น ตรวจสอบให้แน่ใจว่าโปรแกรมเล่นดีบักที่เหมาะสมตามเวอร์ชัน ActionScript ในเวอร์ชันรันไทม์ที่ไม่ใช่ดีบักเกอร์ เมธอด Error.getStackTrace()
จะส่งคืน null
person
Jason Sturges
schedule
22.04.2013