SlideShare a Scribd company logo
1 of 39
Download to read offline
如何利用 user 幫你抓 bug
    用 try catch 就可以




                  第12回 AS 讀書會
郭佳甯 / ETREX / 卡卡米
  ● 線上繪圖軟體 : http://www.fiito.com/
     ● 其他的 : k-mean-clustering
         ● 辨色力測驗
         ● 記憶力測驗
今天的內容




講完了~下課~
今天的內容
   ● Bug
 ● Try Catch
● Debug 資訊
Bug
Bug
● 編譯時期的語法錯誤
● 執行時期的語法錯誤
 ● flash player 崩潰
     ● 語意錯誤
編譯時期的語法錯誤

你的 compiler 會告訴你
var i:String = 1;

編譯不給你過
Error: Implicit coercion of a value of type int to
an unrelated type String.
執行時期的語法錯誤

你的 user 不會告訴你
new Sprite().addChild(null);

他會告訴別人
flash player 崩潰

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

我想要一個簡單的排序功能
這樣寫可以嗎?
功
能
程
式


測
試
程
式
這不可能阿 !?

setDepth(container,
       displayArray,
       depthArray);

if (isCorrectDepth(container,
                 displayArray,
                 depthArray) == false)
    trace("這不可能阿 !?");
Live Demo


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

一個一個看
自動化測試 - AsUnit
避免程式設計師已知的語意錯誤
   http://asunit.org/
Try Catch
Try Catch
如果我想用 try catch 包住整隻程式
 那我至少要寫幾個 try catch ?
        很多很多個
Try Catch
 ● 基礎教學
 ● 執行順序
 ● 覆蓋範圍
Try Catch 基礎教學
● Adobe 的官方教學 - 使用 try..catch..finally 陳述式
Try Catch 執行順序
   ● 基本 try catch
   ● 巢狀 try catch
基本 Try Catch




   12456
巢狀 Try Catch




  1 2 3 5 6 7 9 10
Try Catch 執行順序
   ● 在 try catch 前後的程式碼會被執行
● 在 try 內部, 錯誤發生前的程式碼會被執行
● 在 try 內部, 錯誤發生後的程式碼會被略過
 ● 完全不知道 finally 可以幹嘛, 有人知道嗎?
Try Catch 覆蓋範圍
     ● 建構式
    ● 靜態變數
    ● 事件監聽
建構式
歡樂3選1
執行ConstructorTest.runTest會看到?

1. 抓到 2007
2. 抓到 1009
3. 沒抓到 1009, 跳出錯誤視窗
建構式
● 變數在 try catch 保護之內
● 建構順序 : 1.變數 2.建構式
事件監聽
歡樂3選1
執行程式後會 trace 出什麼?

1. hello world !!
2. hello GG
3. hello 沒抓到2007, 跳出錯誤視窗
事件監聽
try catch 加在 addEventListener 沒用
       要加在 handler 身上才行
靜態變數
歡樂3選1
下列敘述何者為真?

1. 我可以正常存取 staticVar1
2. 呼叫 staticFunction2 會得到 2007
3. 這是編譯時期錯誤, compiler 不會過
靜態變數
 ● 靜態變數的實體化是在類別的初始化時
  ● 類別的初始化是在第一次存取類別時
● 類別的初始化只會作一次 不管成功或失敗
  ● 類別的初始化失敗 類別就會變成 null
   ● 靜態成員的程式碼也是照順序執行
Debug 資訊
Debug 資訊
   ● JS
  ● Flash
  ● Error
JS
● userAgent
  ○ 設備
  ○ 作業系統
  ○ 瀏覽器
● 解析度
Flash
● Flash Player 版本
  ● 記憶體使用量
    ● 系統狀態
    ● 螢幕截圖
Error
    ● ErrorID
   ● message
     ● name
● getStackTrace()

沒用沒用沒用沒用
其他
● 效能問題
● 法律問題
郭佳甯 / ETREX / 卡卡米
       ● blog : http://etrex.blogspot.tw/
      ● plurk : http://www.plurk.com/etrex
● facebook : https://www.facebook.com/etrex.kuo
      ● mail : et284vu065k3@gmail.com

More Related Content

Similar to 第12回AS讀書會

Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理Justin Lin
 
Introduction of Reverse Engineering
Introduction of Reverse EngineeringIntroduction of Reverse Engineering
Introduction of Reverse EngineeringYC Ling
 
PHP 也有 Day #35 - 精通 PHP 錯誤處理,讓除錯更自在
PHP 也有 Day #35 - 精通 PHP 錯誤處理,讓除錯更自在PHP 也有 Day #35 - 精通 PHP 錯誤處理,讓除錯更自在
PHP 也有 Day #35 - 精通 PHP 錯誤處理,讓除錯更自在Asika Simon
 
TDD 介紹
TDD 介紹TDD 介紹
TDD 介紹williewu
 
Java SE 7 技術手冊投影片第 08 章 - 例外處理
Java SE 7 技術手冊投影片第 08 章 - 例外處理Java SE 7 技術手冊投影片第 08 章 - 例外處理
Java SE 7 技術手冊投影片第 08 章 - 例外處理Justin Lin
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsHo Kim
 
軟體組裝心得分享
軟體組裝心得分享軟體組裝心得分享
軟體組裝心得分享Wen Liao
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)Chu-Siang Lai
 
Continuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CIContinuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CIChu-Siang Lai
 
Debugging - 前端工程開發實務訓練
 Debugging - 前端工程開發實務訓練 Debugging - 前端工程開發實務訓練
Debugging - 前端工程開發實務訓練Joseph Chiang
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐zhangsuoyong
 
由一个简单的程序谈起――之二
由一个简单的程序谈起――之二由一个简单的程序谈起――之二
由一个简单的程序谈起――之二yiditushe
 
TypeScript-twmvc#16
TypeScript-twmvc#16TypeScript-twmvc#16
TypeScript-twmvc#16twMVC
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Kris Mok
 
2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發AgileCommunity
 
Java_04:例外異常處理機制
Java_04:例外異常處理機制Java_04:例外異常處理機制
Java_04:例外異常處理機制Brad Chao
 
twMVC#16 | TypeScript
twMVC#16 | TypeScripttwMVC#16 | TypeScript
twMVC#16 | TypeScripttwMVC
 

Similar to 第12回AS讀書會 (20)

Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理
 
Introduction of Reverse Engineering
Introduction of Reverse EngineeringIntroduction of Reverse Engineering
Introduction of Reverse Engineering
 
PHP 也有 Day #35 - 精通 PHP 錯誤處理,讓除錯更自在
PHP 也有 Day #35 - 精通 PHP 錯誤處理,讓除錯更自在PHP 也有 Day #35 - 精通 PHP 錯誤處理,讓除錯更自在
PHP 也有 Day #35 - 精通 PHP 錯誤處理,讓除錯更自在
 
TDD 介紹
TDD 介紹TDD 介紹
TDD 介紹
 
Java SE 7 技術手冊投影片第 08 章 - 例外處理
Java SE 7 技術手冊投影片第 08 章 - 例外處理Java SE 7 技術手冊投影片第 08 章 - 例外處理
Java SE 7 技術手冊投影片第 08 章 - 例外處理
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization Skills
 
例外處理
例外處理例外處理
例外處理
 
軟體組裝心得分享
軟體組裝心得分享軟體組裝心得分享
軟體組裝心得分享
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 
Continuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CIContinuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CI
 
Using vim
Using vimUsing vim
Using vim
 
Debugging - 前端工程開發實務訓練
 Debugging - 前端工程開發實務訓練 Debugging - 前端工程開發實務訓練
Debugging - 前端工程開發實務訓練
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐
 
由一个简单的程序谈起――之二
由一个简单的程序谈起――之二由一个简单的程序谈起――之二
由一个简单的程序谈起――之二
 
TypeScript-twmvc#16
TypeScript-twmvc#16TypeScript-twmvc#16
TypeScript-twmvc#16
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
 
2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發
 
SCJP ch14
SCJP ch14SCJP ch14
SCJP ch14
 
Java_04:例外異常處理機制
Java_04:例外異常處理機制Java_04:例外異常處理機制
Java_04:例外異常處理機制
 
twMVC#16 | TypeScript
twMVC#16 | TypeScripttwMVC#16 | TypeScript
twMVC#16 | TypeScript
 

第12回AS讀書會