1 of 39

如何利用 user 幫你抓 bug

用 try catch 就可以

第12回 AS 讀書會

2 of 39

郭佳甯 / ETREX / 卡卡米

3 of 39

今天的內容

講完了~下課~

4 of 39

今天的內容

  • Bug
  • Try Catch
  • Debug 資訊

5 of 39

Bug

6 of 39

Bug

  • 編譯時期的語法錯誤
  • 執行時期的語法錯誤
  • flash player 崩潰
  • 語意錯誤

7 of 39

編譯時期的語法錯誤

你的 compiler 會告訴你

var i:String = 1;

編譯不給你過

Error: Implicit coercion of a value of type int to an unrelated type String.

8 of 39

執行時期的語法錯誤

你的 user 不會告訴你

new Sprite().addChild(null);

他會告訴別人

9 of 39

flash player 崩潰

◢▇▆▅▄▃▂崩╰(〒皿〒)╯潰▂▃▄▅▆▇◣

10 of 39

語意錯誤

我想要一個簡單的排序功能

這樣寫可以嗎?

11 of 39

12 of 39

這不可能阿 !?

setDepth(container,

displayArray,

depthArray);

if (isCorrectDepth(container,

displayArray,

depthArray) == false)

trace("這不可能阿 !?");

13 of 39

Live Demo

  1. ShuffleTest.runTest
  2. LayoutSetDepthTest.runTest3
  3. LayoutSetDepthTest.runTest4
  4. Layout.setDepth2

一個一個看

14 of 39

自動化測試 - AsUnit

避免程式設計師已知的語意錯誤

http://asunit.org/

15 of 39

Try Catch

16 of 39

Try Catch

如果我想用 try catch 包住整隻程式

那我至少要寫幾個 try catch ?

很多很多個

17 of 39

Try Catch

  • 基礎教學
  • 執行順序
  • 覆蓋範圍

18 of 39

Try Catch 基礎教學

19 of 39

Try Catch 執行順序

  • 基本 try catch
  • 巢狀 try catch

20 of 39

基本 Try Catch

1 2 4 5 6

21 of 39

巢狀 Try Catch

1 2 3 5 6 7 9 10

22 of 39

Try Catch 執行順序

  • 在 try catch 前後的程式碼會被執行
  • 在 try 內部, 錯誤發生前的程式碼會被執行
  • 在 try 內部, 錯誤發生後的程式碼會被略過
  • 完全不知道 finally 可以幹嘛, 有人知道嗎?

23 of 39

Try Catch 覆蓋範圍

  • 建構式
  • 靜態變數
  • 事件監聽

24 of 39

建構式

25 of 39

歡樂3選1

執行ConstructorTest.runTest會看到?

  1. 抓到 2007
  2. 抓到 1009
  3. 沒抓到 1009, 跳出錯誤視窗

26 of 39

建構式

  • 變數在 try catch 保護之內
  • 建構順序 : 1.變數 2.建構式

27 of 39

事件監聽

28 of 39

歡樂3選1

執行程式後會 trace 出什麼?

  • hello world !!
  • hello GG
  • hello 沒抓到2007, 跳出錯誤視窗

29 of 39

事件監聽

try catch 加在 addEventListener 沒用

要加在 handler 身上才行

30 of 39

靜態變數

31 of 39

歡樂3選1

下列敘述何者為真?

  • 我可以正常存取 staticVar1
  • 呼叫 staticFunction2 會得到 2007
  • 這是編譯時期錯誤, compiler 不會過

32 of 39

靜態變數

  • 靜態變數的實體化是在類別的初始化
  • 類別的初始化是在第一次存取類別時
  • 類別的初始化只會作一次 不管成功或失敗
  • 類別的初始化失敗 類別就會變成 null
  • 靜態成員的程式碼也是照順序執行

33 of 39

Debug 資訊

34 of 39

Debug 資訊

  • JS
  • Flash
  • Error

35 of 39

JS

  • userAgent
    • 設備
    • 作業系統
    • 瀏覽器
  • 解析度

36 of 39

Flash

  • Flash Player 版本
  • 記憶體使用量
  • 系統狀態
  • 螢幕截圖

37 of 39

Error

  • ErrorID
  • message
  • name
  • getStackTrace()

沒用沒用沒用沒用

38 of 39

其他

  • 效能問題
  • 法律問題

39 of 39

郭佳甯 / ETREX / 卡卡米