ActionScript 的程式主要有兩種方式,一種是設定中斷點並使用 Flash 內的影片除錯模式,另外一種是使用 trace 函式。
1-8-1 使用中斷點及除錯模式
請開啟「debug.fla」。設定程式中斷點有兩種方式:第一種如下圖,點選「Debug options」→「Toggle Breakpoint」,在游標所在的程式行上設中斷點;第二種如下下圖,直接在該行前的設定區擊點即可設定。完成中斷點設定者該行會標上紅色的圓點。
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_vzmdnQQUCIYtZzyLzrBj2bfTC6aHzVhZiQKhppzKKBCMM_Jk05XKm9kjd7elgwMjvRz1c88bVV8MKt4u_UwcqLG1wJlchEWh_mOhhdXRbv4vacTnjRZ48NVcOGLza-UrnyTUUzlZLiadHIpBXBKWu0MYyX-dYjoobRnbcm4A=s0-d) |
使用「Debug options」→「Toggle Breakpoint」,設定或移除中斷點 |
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_uoc0ux-h4zo1o0QDI_IvqW6Cja-Uc37hjG6PoNCNgrI2K27NKo9xgQVSCLTlSJu9w5klGNGgsKPEsYJYwW488iTiBAIxjd5i_UBpifIblslgUHQW62hQjYr2xAofbg84cmo6RbHmk0vXzW1kuTBQMo8PTLjiUm4ZRtKtNy3Q=s0-d) |
直接點選該行前的設定區,設定中斷點 |
設定中斷點之後,點選命令列的「Debug」→「Debug Movie」,或按【Ctrl】+【Shift】+【Enter】以除錯模式測試影片。
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_tL460AV0xxkiLu9PEpRgXAEv_SPCZLzNVJ-s6EqU7qU7Z_nWv7coiMQGyEj48fb08jb1gCgitWrBZcndOjEpY1MPzKBPKWjTU-XxpilC0toWI-lq-MStKwqwMqCI93isXMgFWHfFDKq87SJdVcmTBetIfpwboYLgyQ9T6mLg=s0-d) |
點選命令列「Debug」→「Debug Movie」 |
啟動除錯模式測試影片時,會出現如下圖的除錯模式。在「Variables」面板下,點選物件名稱this,即可展開並查看各變數及子物件的狀況。
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_u06UrvFQFWLmz_AigRB8_kHrXFKnvCrs4l9fzYzCoBGnCijVcIKHajQMDC7xEFVKFvsf2UMDYuaFmqNAnCegfh0VaXBkJPgX8vF7FL18n2fCxKtH8EXysDD9xd5JK04PwYf51iatswbP6SfuMnCc5D7TEf68QlEpUW0MWp=s0-d) |
除錯模式 |
下圖為 Debug Console 的功能圖示。綠色三角形為「繼續」圖示,按下後 AS 會開始執行,遇到中斷點後暫停。紅色叉叉為「離開除錯模式」圖示,按下後回到原來的編輯模式。另外三個圖示依序為「下一行」(Step Over)、「下一行進入函式」(Step In)和「下一行離開函式」(Step Out)。通常會使用「下一行」慢慢除錯。
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_smGN34_dQeD_EiHDPDWCAIQLcz5FYD0BrXn_A1yxM6OHpE33mPhLeeB-YgrwFuaGvK9nYXpCV53oQstOx85g89p8mCmYjfDgDCjV9Z5Tw8IjpItnPo6zEQAIshncTNoFPosOY-AbeVaeI0fWZIonCVJrlt3t--JUDZpGptKg=s0-d) |
Debug Console的功能圖示 |
1-8-2 trace
在某些時候中斷點不見得好用,此時可以使用 trace 輸出你想看的變數。trace 是一個函式,使用的方式很簡單只要將變數名傳給它即可。例如,我們開啟 debugTrace1.fla,在其 AS 中加入第18行(下圖),測試影片時,會顯現「Output」視窗,並將輸出的結果顯示出來(下下圖)。
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_tSyxFvuXYjTzOERq545ggTKeOS3Sxiv4nYeI6tCgNHB8COtZ5mPc1YRqbv_e0i7wym-A5urPGjHAH9GiLBwDJe3ol7HA2fWOEaZfceJaoAZyOkMnOnuh6ur9iZNBgl8BrBlmY8JNfydXGK0meQKEgE73LZCewUd_tp87YD=s0-d) |
加入「trace(tx, ty)」,多個變數用逗號隔開 |
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_t3plhBHT6vMAteq4QqCXVmZy-FvLVN1qNAI1nQX4Jhv4VlO4YypZ-1igwVh_TdhAd_xKnvAoW6lnCm_-mDE-0_ffCcS12RmgrGN2Xp_g5L_HzitnrKvsxzzBMXsJU1U5sn7nkOtPU0gWiv66gBCNPxfbkTq5zjReW9F88emA=s0-d) |
Debug_trace1 執行時的輸出視窗 |
在上圖中,你可以看到一串數值,但是無法得知迴圈的控制變數和顯示數值之間的關係。此時為了標示數值的順序,可以將迴圈控制變數i加入輸出(於 debugTrace2.fla),如下式:
trace(i + ": " + tx + ", " + ty);
上式取代原來的第18行(下圖),能在輸出時標示迴圈控制變數i的值(下下圖)。
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_to4HXZNPdP9c3TezZLDOrX78q2pxY8bu3Zi3B2kTPWQIUcytLwqu3Mi2YqQSSzpv9wzrPfrGkxPB5HMtiWds5iQ0xqUHtvo18GKL5xZTCWwb0VayQtj20sOMDDglWnviWwJrFr42pY16FRHMFFcOLbmAMmrOUkUQ6yn_sGpA=s0-d) |
取代為「trace(i + ": " + tx + ", " + ty)」 |
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_ssHQyQ7LNNAE24NX-57wR7IMBNPHGW9-Byt_VCu7ihxt9hmSSdQk2iYsNWBZfrmht-hJ0Xq5wJjmfpoSiVmI4XQKFkAUE9Q5B9UqvOXFMGwStx8zCg71V7DhFTgZ-qhoedzFEIJMGPHHJMq5tTRg-72M6ut3yec9G73_u7hA=s0-d) |
debugTrace2 執行時的輸出視窗 |
trace 的變化很多,你可以使用如下的式子監看多個變數:
trace("a:"+a, "b:"+b, "obj.c:"+obj.c);
使用中斷點除錯是很好的選擇,然而有些疑難的Bugs,必須使用trace才能有效率地除錯,因此trace的使用必須多加練習。
1-8-3 使用自製的工具
以 trace 查看較複雜的資料物件時,無法直接顯示其資料內容。例如,用 trace 直接輸出 Object 型別的物件,只會看到 [object Object]。為了更方便針對這類的物件除錯,筆者自製了QopDump 類別,只要將光碟中的 QopDump.as 和 FLA 檔放在一起即可使用。
或者使用更理想的做法,將 QopDump.as 放在設定的類別路徑上。點選「Edit」→「Preferences」開啟面板,在面板左側選擇「ActionScript」分類,然後點選「ActionScript 3.0 Settings」,如下圖所示。
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_tw02NYqPLMXtCKqt6eFxkjE53DLKg1LDcEkgWiqW4NRPp_8VvZEBwsLPX4WraWFMwR3P507lWZn5pfwqGWUm-PQpYUVwTlwT2-d3scZDBoCdO3F0VYUVpc-ciX0mVjI_oltOn_KzwutNICLRH_bX8SQo0Pd55krr1N9PZ8LQ=s0-d) |
點選「ActionScript 3.0 Settings」 |
在「ActionScript 3.0 Settings」面板內,新增類別路徑「C:\AS_classes」(路徑目錄可以自行決定),如下圖所示。路徑設定好後,將 QopDump.as 複製到「C:\AS_classes\」目錄下,即可使用。
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_sNysbjhOs0WXsQ0oUIAKnHY_fa4EyUuKjHI-yMZfnFFQlcuTZCpd-LvKCcKv63dCcitZTT6opQVgAJoHKMQWfr1Ar26Aoj8gBf7oNJ5eHPkcFxwWqH6vNBoC8Qn8VhOFMY-zxdXNZJ8uwIhlsq6xODrc3_EX1Zp-OTvvkHIg=s0-d) |
新增類別路徑「C:\AS_classes」 |
QopDump 是個類別,提供兩個靜態方法,echo 和 go。go 方法是將 Object 屬性以換行和縮排的方式一一列出成有層次的字串,echo 則是將這些文字資料輸出到 Output 面板。debugQopDump.fla 為測試檔,其 Frame Actions 如下圖所示,執行結果如下下圖。
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_siuu9ndihvpSRDXHBWWEcYL0Z4qgaihh6ToDpglEh2Zx7eX_HKIOkdCG8NYhry_vqu_pjgi6iapsYjh1rQqXRlgX5Y2REeVLKGP5iNdXxmPjVctR3NMz_Nc8AO2KQB1zEN0rFRS_7idGE2EX6V_022ifEgYbC3XGgc3yOB=s0-d) |
debugQopDump.fla 的 Frame Actions |
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_tioP7qYmwgvHrPsmKcDrLaNpixFlqUsr0K5Gi0rjsWLIuHDyCJn5_-L5_DuF6FT_-IwqS0FqAp1ZgbvU3-YBcldPVJ_9yNwjO3khSVVZAFHIVLRWUb7bboBb-FDmSHe9k7JIH1BHdmjvsIC5r7DpVdXB_iYMXpdm1yCJ9a-A=s0-d) |
debugQopDump.fla的執行結果 |
QopDump.as 本身為一個類別檔,若有興趣其運作方式,請在看完物件導向的內容後,再查看原始碼。
沒有留言:
張貼留言