SlideShare a Scribd company logo
1 of 52
Download to read offline
1




    自我省視: 偵錯
     前端工程開發實務訓練 (6)

        講師:蔣定宇 / josephj




      Copyright © 2012 FITPI. All rights reserved.
2



                        偵錯
        開發程式就是一連串的 try and error
    JavaScript 有哪些方法及工具能幫助我們解決問題呢?

         ๏ Log - 開發人員用的提示訊息
         ๏ Error Handling - 錯誤處理機制
         ๏ Breakpoint - 利用工具追蹤問題
         ๏ Fiddler - 如何線上偵錯


               Copyright © 2012 FITPI. All rights reserved.
3




                 Log
    找問題最直覺的作法就是直接顯示訊息
    可以很快地知道變數的值或有沒有跑到




        Copyright © 2012 FITPI. All rights reserved.
4




          alert();
    過去 JavaScript 還沒有良好偵錯環境的唯一作法
     但因簡單及直覺的特性、到現在還是很常用




            Copyright © 2012 FITPI. All rights reserved.
5



    alert();




     Copyright © 2012 FITPI. All rights reserved.
6



        alert 的優缺點
    ๏ 優點:
     ❖ 直覺:不用安裝、通用於每個瀏覽器。
     ❖ 同步:可以暫停執行 JS 在目前的行數。
    ๏ 缺點:
     ❖ 干擾:因同步、需要點選才能取消。
     ❖ 很難對快速 loop 類型的程式做偵錯。
      例如:音樂播放、拖拉、動畫...

             Copyright © 2012 FITPI. All rights reserved.
7




      console.log();
     從 Firebug (火狐瀏覽器外掛) 開始所提供的功能
    後來變成每個瀏覽器的標準、甚至在 Node.js 也可用




             Copyright © 2012 FITPI. All rights reserved.
8
       console.log();
    http://getfirebug.com/wiki/index.php/Console_API




                          各大瀏覽器按 F12 都會有開發工具
                 Copyright © 2012 FITPI. All rights reserved.
console.log 的優缺點
9




    ๏ 優點:
     ❖ 干擾性低,大多數情況都適用。
    ๏ 缺點:
     ❖ IE6, 7 不支援、甚至會產生錯誤。
     ❖ 不是每個瀏覽器都直接可看。
      ✦ Firefox 得安裝 Firebug。

     ❖ 沒辦法 Block 後續 Script 執行。
      ✦ 此時用 alert 即可。

    ๏ 維護不易、寫多了反而一團亂。
     上線後不應該存在。
                   Copyright © 2012 FITPI. All rights reserved.
10




       Y.log();
     YUI 內建改良版的 console.log。




          Copyright © 2012 FITPI. All rights reserved.
Log 會碰到的問題
11




                                            超多的 Log,如何過濾?




       Copyright © 2012 FITPI. All rights reserved.
12
               Y.log();
     Y.log(<Message 訊息>, <Severity 等級>, <Group 組別>);




                                 Y.log(“...”, “info”, “#channel-
                                 player”);




                                 稍微設定一下!只看其中一個模組的訊息
                                 YUI({
                                     logInclude: {
                                          “#channel-player”: true
                                     }
                                 }).use()




                 Copyright © 2012 FITPI. All rights reserved.
Y.log 的優點
13




     ๏ 優點:
      ❖ 可依 Severity (info, warn, error) 分
        類,開發工具可直接做 filter。
      ❖ 可自訂 Group、透過 YUI 的 logInclude
        或 logExclude 設定做分類。
      ❖ 在使用 YUI 的前提下,每個瀏覽器都可以
        用,即使 IE6-7 也不會有錯誤。
      ❖ 即使在線上環境,也可透過 YUI 的
        debug: false 把 log 關閉。
                 Copyright © 2012 FITPI. All rights reserved.
14

     new Y.Console()
     用 YUI 產生的 Console 可完全支援每一個瀏覽器
     對於老舊瀏覽器或特殊情況 (嵌入式系統) 超好用

                                  (new Y.Console()).render();


                                http://yuilibrary.com/yui/docs/console/

                         http://yuilibrary.com/yui/docs/console-filters/




     練習:http://f2eclass.com/lab/debug/console.html
                   Copyright © 2012 FITPI. All rights reserved.
15



             Log 心得分享
     ๏ 建議盡量將程式的每個函式第一行、重要執行
      點都放置 Log。類似足跡的概念、讓我們容易
      去追蹤問題及了解結構。
     ๏ 當程式中需要大量的 Log 時,請一定要指定
      Severity 及 Group 參數,方便後續過濾。
      ❖ YUI 的 logInclude, logExclude, debug 好用!
     ๏ loop 類的 Log (ex. 音樂播放進度事件)請自
      行斟酌是否使用。
                   Copyright © 2012 FITPI. All rights reserved.
16




     Error Handling
     當程式發生了錯誤,我們該如何處理呢?




         Copyright © 2012 FITPI. All rights reserved.
17


             Error 生命週期
       瀏覽器錯誤


程式決定是否要往上丟



      window.onerror
                            JavaScript 開發人員可利用
程式決定是否要往上丟

                            try-catch 與 window.onerror
        try-catch
                            補抓並處理錯誤

         錯誤發生




                       Copyright © 2012 FITPI. All rights reserved.
try-catch
18




                 包覆在可能產生錯誤的程式碼外
     參考資料:http://www.javascriptkit.com/javatutors/trycatch2.shtml

          try {
              // 可能會產生錯誤的程式碼
          } catch (error) {

              // 當有錯誤的時候才會進入
              // error 的屬性有 message 與 name
              alert("錯誤類別為:" + error.name +
                     ", 錯誤訊息為:" + error.message);
          }

          // 後續的程式碼仍然可以繼續執行(除非在 catch 中 return)

              練習:http://f2eclass.com/lab/debug/try-catch.html

                           Copyright © 2012 FITPI. All rights reserved.
window.onerror
19




                      錯誤處理的最後一道防線
 參考資料:http://dev.opera.com/articles/view/better-error-handling-with-window-onerror/



     window.onerror = function (message, url, line) {
         alert([
             "JavaScript error: " + message,
             " on line " + line,
             " for " + url
         ].join(""));

         return false; // false 會繼續產生錯誤、true 則會壓抑錯誤
     };




          練習:http://f2eclass.com/lab/debug/window-onerror.html

                             Copyright © 2012 FITPI. All rights reserved.
20



          錯誤處理心得分享
     ๏ 將錯誤往上回報,避免只是 try-catch 壓抑。
      ❖ throw new Error("使用者自定錯誤");
     ๏ window.onerror 處理:
      ❖ 線上:隱藏錯誤、回報到伺服器。
      ❖ 開發:顯示錯誤、開發人員必須處理掉。
     ๏ 推薦投影片:
      ❖ http://www.slideshare.net/nzakas/enterprise-
        javascript-error-handling-presentation
                    Copyright © 2012 FITPI. All rights reserved.
21




          Breakpoint
     現今的 Browser 都有更好的 Developer 工具了
        可以用真正程式開發方式追蹤問題!
        按 F12 打開(IE 8 以上及其他標準瀏覽器)




              Copyright © 2012 FITPI. All rights reserved.
debugger;
22




                                用程式設定 Breakpoint




     http://blog.miniasp.com/post/2011/03/17/Using-JavaScript-debugger-statement-enter-breakpoints.aspx
                                      Copyright © 2012 FITPI. All rights reserved.
23


               Breakpoint 中斷點




 conditional
 breakpoint                                          Step Control

         programming
          breakpoint   Copyright © 2012 FITPI. All rights reserved.
24




         Fiddler




     每個 F2E 都應該活用 Fiddler

         Copyright © 2012 FITPI. All rights reserved.
25


      Fiddler 是什麼?




 Fiddler 在你電腦上,相當於建立了虛擬的 Proxy、一但執
 行,所有的網路封包都會經由此 Proxy 進出 => 只要會寫
 JavaScript、你可以對你所瀏覽的網頁做任何事!

            Copyright © 2012 FITPI. All rights reserved.
26
      JavaScript 程式碼被最小化怎麼辦?




     線上環境都會壓縮程式碼、沒 Log,怎麼 Debug?
              Copyright © 2012 FITPI. All rights reserved.
27


            AutoResponder
                     竄改網站回傳的 Response

                                            3. 將 Session 拉到 AutoResponder 中
     1. 右鍵 Unlock for Editing




                                                                 2. 修改已經抓回來的 JavaScript 內容




                                Copyright © 2012 FITPI. All rights reserved.
AutoResponder
28




                  顯示結果




     未來每次 Reload 就會以你修改的程式來呈現
     這對我們在 Production 做偵錯非常有幫助

           Copyright © 2012 FITPI. All rights reserved.
29


     AutoResponder
     常用網站的樣式讓你不舒服?調整一下吧




          Copyright © 2012 FITPI. All rights reserved.
30




     練習:在 Y! 新聞加入
     alert("被 Fiddler 改寫了!")




           Copyright © 2012 FITPI. All rights reserved.
31



      Fiddler 的必備 Plugins

       ๏ JavaScript Formatter
       ๏ JSON Viewer
       ๏ Gallery


     http://www.fiddler2.com/fiddler2/extensions.asp

                    Copyright © 2012 FITPI. All rights reserved.
32


     JavaScript Formatter
         整理壓縮過後的程式碼


                     xuite 首頁最小化過後的 JavaScript




                                    本來只有一行的 JavaScript 被整裡的很漂亮




           Copyright © 2012 FITPI. All rights reserved.
33



     JSON Viewer
     用樹狀圖觀看 Response資料




        Copyright © 2012 FITPI. All rights reserved.
34


       Gallery
     直接看 Session 中的圖片




                             有圖有真相、顯示目前選取的圖




        Copyright © 2012 FITPI. All rights reserved.
35



            FiddlerScript
       是 Fiddler 最強大的功能:可以自訂選單與功能
     以下的功能是我為 miiiCasa 所製作,可節省許多開發時間

      ๏   塞入 miiiCasa Bar
      ๏   不同開發人員環境的切換
      ๏   插入 Firebug Lite 或 YUI Console 等好用工具
      ๏   列出已翻譯、未翻譯的字串
      ๏   檢視模組資訊
      ๏   JavaScript/CSS 壓縮與否的切換

                    Copyright © 2012 FITPI. All rights reserved.
塞入 miiiCasa Bar
36




             本來必須透過 Router,用 Fiddler 模擬
     2. 重新整理後,就會看到 miiiCasa Bar 出現在網頁左下方(此為點選後的狀況)




                                               1. 選取顯示哪種環境的 miiiCasa Bar




               3. 此時檢視原始碼就會看到我們剛塞入的內容




                        Copyright © 2012 FITPI. All rights reserved.
新增 Fiddler 選單
37




     製作選單,變數會存在 INJECTION_HOST



                       Copyright © 2012 FITPI. All rights reserved.
38


          依據變數塞入 JS
     依據 INJECTION_HOST 的不同,會塞入不同環境的 miiiCasa Bar




      在 onBeforeResponse (輸出之前) 處理函式中
                        Copyright © 2012 FITPI. All rights reserved.
開發環境切換
39




     快速切換團隊中不同工程師的開發環境




                                            每個工程師都有自己的環境
                                            以 Port 做區隔,像我是 5002*




          Copyright © 2012 FITPI. All rights reserved.
40


     Fiddler 若是有個選單可隨時切換就太方便了!




             Copyright © 2012 FITPI. All rights reserved.
41


     實際上是被 Fiddler 自動對應到 devm1.corp.miiicasa.com:50020




           Copyright © 2012 FITPI. All rights reserved.
塞入 Debug Console
42




     插入 Firebug Lite 或 YUI Console




             Firebug Lite
             在像 IE6 的瀏覽器就特別有幫助




             Copyright © 2012 FITPI. All rights reserved.
43


                列出翻譯字串
     設計多國語系時有特殊的 Class Name (.intl-translated, .intl-translatable)




                                                 還沒翻譯跟翻譯完成的會帶不同的 CSS Class Name
                                                 紅色表示還沒翻譯、綠色表示翻譯完成
                                                 點兩下可叫出翻譯工具




                        Copyright © 2012 FITPI. All rights reserved.
檢視模組資訊
44




                                列出有 id 屬性的 <div/>區塊,點兩下會出現 alert 視窗




     在開發環境打入此指令就會自動把相關   案開好




                         Copyright © 2012 FITPI. All rights reserved.
45



         切換壓縮與否
     開發環境的 JS/CSS 預設都是動態合併多個小檔案並最小化過的。

            http://a.mimgs.com/fuse?module=space&type=js




            但是最小化會造成 Debugging 很困難


               Copyright © 2012 FITPI. All rights reserved.
46



         切換壓縮與否
     其實只要多一個 &nominify 的參數即可回復正常
           http://a.mimgs.com/fuse?module=space&type=js&nominify




      但是每次都要手動改或動程式實在很麻煩!
                Copyright © 2012 FITPI. All rights reserved.
47



           切換壓縮與否
     有 Fiddler 真好!點選一下不用改程式碼就可以看到沒最小化的
                     http://a.mimgs.com/fuse?module=space&type=js




      FiddlerScript 也超簡單!

                     Copyright © 2012 FITPI. All rights reserved.
48



     練習:塞入 Firebug Lite
     ๏ 打開 CustomRule.js
      ( 點選 Rules > Custom Rules... )

     ๏ 增加選單:
      在 class Handler 的開頭加入以下程式碼、存檔,即可增加選項:
      public static RulesOption("Enable Firebug Lite")
      var IS_INCLUDE_FIREBUG: boolean = false;

     ๏ 在 HTML 中塞入 JavaScript:
      找到 OnBeforeResponse 事件處理函式,在結束前加入連結中程式
      碼:http://f2eclass.com/lab/debug/fiddler-firebug.txt

     ๏ FiddlerScript 官方文件:
      http://www.fiddler2.com/Fiddler/Dev/ScriptSamples.asp

                     Copyright © 2012 FITPI. All rights reserved.
49




        開發你的工具!
     每個人的需求都不太一樣,這邊只是給你一些實作例子
      你可以想想什麼東西可以為你自己與團隊帶來產值
          然後利用 FiddlerScript 來實作!

                  類似的工具:
       Charles Debugging Proxy, mitmproxy



                Copyright © 2012 FITPI. All rights reserved.
50



           偵錯 - Review
     ๏ Log - 各種訊息顯示機制與 YUI Console
     ๏ Error Handling - try-catch 與
       window.onerror 如何使用

     ๏ Breakpoint - 開發工具如何設定
       breakpoint。(debugger;)

     ๏ Fiddler - 線上偵錯與自行開發工具
                 Copyright © 2012 FITPI. All rights reserved.
51



           偵錯 - Review
     ๏ Log - 各種訊息顯示機制與 YUI Console
     ๏ Error Handling - try-catch 與
       window.onerror 如何使用

     ๏ Breakpoint - 開發工具如何設定
       breakpoint。(debugger;)

     ๏ Fiddler - 線上偵錯與自行開發工具
                 Copyright © 2012 FITPI. All rights reserved.
52




     Q&A

     Copyright © 2012 FITPI. All rights reserved.

More Related Content

What's hot

更好的文件组织
更好的文件组织更好的文件组织
更好的文件组织Kejun Zhang
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月鍾誠 陳鍾誠
 
SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践lifesinger
 
程式人雜誌 -- 2015 年1月號
程式人雜誌 -- 2015 年1月號程式人雜誌 -- 2015 年1月號
程式人雜誌 -- 2015 年1月號鍾誠 陳鍾誠
 
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)Jollen Chen
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发leneli
 
移动Web开发框架jqm探讨
移动Web开发框架jqm探讨移动Web开发框架jqm探讨
移动Web开发框架jqm探讨newker
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Designjay li
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践jay li
 
JavaScript Code Quality
JavaScript Code QualityJavaScript Code Quality
JavaScript Code QualityJoseph Chiang
 
網頁三本柱之Html與css
網頁三本柱之Html與css網頁三本柱之Html與css
網頁三本柱之Html與cssAaron King
 
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)Kejun Zhang
 
程式人雜誌 2015年三月
程式人雜誌 2015年三月程式人雜誌 2015年三月
程式人雜誌 2015年三月鍾誠 陳鍾誠
 
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides32021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3LiviaLiaoFontech
 
深入剖析浏览器
深入剖析浏览器深入剖析浏览器
深入剖析浏览器jay li
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展江華 奚
 
Html5开发android应用程序概述
Html5开发android应用程序概述Html5开发android应用程序概述
Html5开发android应用程序概述kevin_yanggl
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐zhangsuoyong
 
讓 HTML5 走進 IPTV Framework
讓 HTML5 走進 IPTV Framework讓 HTML5 走進 IPTV Framework
讓 HTML5 走進 IPTV FrameworkJollen Chen
 
富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用luolonghao
 

What's hot (20)

更好的文件组织
更好的文件组织更好的文件组织
更好的文件组织
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月
 
SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践
 
程式人雜誌 -- 2015 年1月號
程式人雜誌 -- 2015 年1月號程式人雜誌 -- 2015 年1月號
程式人雜誌 -- 2015 年1月號
 
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
移动Web开发框架jqm探讨
移动Web开发框架jqm探讨移动Web开发框架jqm探讨
移动Web开发框架jqm探讨
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Design
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践
 
JavaScript Code Quality
JavaScript Code QualityJavaScript Code Quality
JavaScript Code Quality
 
網頁三本柱之Html與css
網頁三本柱之Html與css網頁三本柱之Html與css
網頁三本柱之Html與css
 
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)
 
程式人雜誌 2015年三月
程式人雜誌 2015年三月程式人雜誌 2015年三月
程式人雜誌 2015年三月
 
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides32021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3
 
深入剖析浏览器
深入剖析浏览器深入剖析浏览器
深入剖析浏览器
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展
 
Html5开发android应用程序概述
Html5开发android应用程序概述Html5开发android应用程序概述
Html5开发android应用程序概述
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐
 
讓 HTML5 走進 IPTV Framework
讓 HTML5 走進 IPTV Framework讓 HTML5 走進 IPTV Framework
讓 HTML5 走進 IPTV Framework
 
富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用
 

Similar to Debugging - 前端工程開發實務訓練

Odoo Development
Odoo DevelopmentOdoo Development
Odoo DevelopmentTsungWei Hu
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Joseph Chiang
 
軟體組裝心得分享
軟體組裝心得分享軟體組裝心得分享
軟體組裝心得分享Wen Liao
 
Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture lusecheng
 
Fiddler使用技巧
Fiddler使用技巧Fiddler使用技巧
Fiddler使用技巧明 李
 
Our experience to start a startup
Our experience to start a startupOur experience to start a startup
Our experience to start a startupYenwen Feng
 
Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Fred Chien
 
Virtual Datacenter
Virtual DatacenterVirtual Datacenter
Virtual DatacenterLRYANG
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Gelis Wu
 
前端杂乱分享
前端杂乱分享前端杂乱分享
前端杂乱分享shyboyzk
 
CICD Workshop 20180922
CICD Workshop 20180922CICD Workshop 20180922
CICD Workshop 20180922Earou Huang
 
Dev c++整合開發工具教學
Dev c++整合開發工具教學Dev c++整合開發工具教學
Dev c++整合開發工具教學Lin Steven
 
Web前端开发工具介绍
Web前端开发工具介绍Web前端开发工具介绍
Web前端开发工具介绍solorez fer
 
2012 08 24_native_vs_adobeair
2012 08 24_native_vs_adobeair2012 08 24_native_vs_adobeair
2012 08 24_native_vs_adobeair綠茶 奶
 
IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519
IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519
IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519August Lin
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發建興 王
 
rebar erlang 2
rebar erlang 2rebar erlang 2
rebar erlang 2致远 郑
 

Similar to Debugging - 前端工程開發實務訓練 (20)

Odoo Development
Odoo DevelopmentOdoo Development
Odoo Development
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
 
軟體組裝心得分享
軟體組裝心得分享軟體組裝心得分享
軟體組裝心得分享
 
Android JNI
Android JNIAndroid JNI
Android JNI
 
Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture
 
Fiddler使用技巧
Fiddler使用技巧Fiddler使用技巧
Fiddler使用技巧
 
Our experience to start a startup
Our experience to start a startupOur experience to start a startup
Our experience to start a startup
 
Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!
 
Virtual Datacenter
Virtual DatacenterVirtual Datacenter
Virtual Datacenter
 
00
0000
00
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
 
前端杂乱分享
前端杂乱分享前端杂乱分享
前端杂乱分享
 
CICD Workshop 20180922
CICD Workshop 20180922CICD Workshop 20180922
CICD Workshop 20180922
 
Dev c++整合開發工具教學
Dev c++整合開發工具教學Dev c++整合開發工具教學
Dev c++整合開發工具教學
 
Web前端开发工具介绍
Web前端开发工具介绍Web前端开发工具介绍
Web前端开发工具介绍
 
2012 08 24_native_vs_adobeair
2012 08 24_native_vs_adobeair2012 08 24_native_vs_adobeair
2012 08 24_native_vs_adobeair
 
IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519
IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519
IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發
 
Fer
FerFer
Fer
 
rebar erlang 2
rebar erlang 2rebar erlang 2
rebar erlang 2
 

More from Joseph Chiang

不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会Joseph Chiang
 
Automatic Functional Testing with Selenium and SauceLabs
Automatic Functional Testing with Selenium and SauceLabsAutomatic Functional Testing with Selenium and SauceLabs
Automatic Functional Testing with Selenium and SauceLabsJoseph Chiang
 
From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)Joseph Chiang
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京Joseph Chiang
 
YUI is Sexy (for JSDC.tw)
YUI is Sexy (for JSDC.tw)YUI is Sexy (for JSDC.tw)
YUI is Sexy (for JSDC.tw)Joseph Chiang
 
YUI is Sexy - 使用 YUI 作為開發基礎
YUI is Sexy - 使用 YUI 作為開發基礎YUI is Sexy - 使用 YUI 作為開發基礎
YUI is Sexy - 使用 YUI 作為開發基礎Joseph Chiang
 
Git - The Social Coding System
Git - The Social Coding SystemGit - The Social Coding System
Git - The Social Coding SystemJoseph Chiang
 
分享無名小站 API
分享無名小站 API分享無名小站 API
分享無名小站 APIJoseph Chiang
 
yui3 is Sexy - 使用 YUI 3 的 Sexy Part !
yui3 is Sexy - 使用 YUI 3 的 Sexy Part !yui3 is Sexy - 使用 YUI 3 的 Sexy Part !
yui3 is Sexy - 使用 YUI 3 的 Sexy Part !Joseph Chiang
 
建立前端開發團隊 - 2011 中華電信訓練所版
建立前端開發團隊 - 2011 中華電信訓練所版建立前端開發團隊 - 2011 中華電信訓練所版
建立前端開發團隊 - 2011 中華電信訓練所版Joseph Chiang
 
不用不可之 Fiddler Debugging Proxy!
不用不可之 Fiddler Debugging Proxy!不用不可之 Fiddler Debugging Proxy!
不用不可之 Fiddler Debugging Proxy!Joseph Chiang
 
Front-end Modular & Autmomated Development
Front-end Modular & Autmomated Development Front-end Modular & Autmomated Development
Front-end Modular & Autmomated Development Joseph Chiang
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)Joseph Chiang
 
Hack Day Sharing at D-Link
Hack Day Sharing at D-LinkHack Day Sharing at D-Link
Hack Day Sharing at D-LinkJoseph Chiang
 

More from Joseph Chiang (20)

不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会
 
Let's Redux!
Let's Redux!Let's Redux!
Let's Redux!
 
Automatic Functional Testing with Selenium and SauceLabs
Automatic Functional Testing with Selenium and SauceLabsAutomatic Functional Testing with Selenium and SauceLabs
Automatic Functional Testing with Selenium and SauceLabs
 
From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)
 
JavaScript Promise
JavaScript PromiseJavaScript Promise
JavaScript Promise
 
F2E for Enterprise
F2E for EnterpriseF2E for Enterprise
F2E for Enterprise
 
F2E, the Keystone
F2E, the KeystoneF2E, the Keystone
F2E, the Keystone
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京
 
YUI is Sexy (for JSDC.tw)
YUI is Sexy (for JSDC.tw)YUI is Sexy (for JSDC.tw)
YUI is Sexy (for JSDC.tw)
 
YUI is Sexy - 使用 YUI 作為開發基礎
YUI is Sexy - 使用 YUI 作為開發基礎YUI is Sexy - 使用 YUI 作為開發基礎
YUI is Sexy - 使用 YUI 作為開發基礎
 
Git - The Social Coding System
Git - The Social Coding SystemGit - The Social Coding System
Git - The Social Coding System
 
miiiCasa is Fun
miiiCasa is FunmiiiCasa is Fun
miiiCasa is Fun
 
分享無名小站 API
分享無名小站 API分享無名小站 API
分享無名小站 API
 
yui3 is Sexy - 使用 YUI 3 的 Sexy Part !
yui3 is Sexy - 使用 YUI 3 的 Sexy Part !yui3 is Sexy - 使用 YUI 3 的 Sexy Part !
yui3 is Sexy - 使用 YUI 3 的 Sexy Part !
 
建立前端開發團隊 - 2011 中華電信訓練所版
建立前端開發團隊 - 2011 中華電信訓練所版建立前端開發團隊 - 2011 中華電信訓練所版
建立前端開發團隊 - 2011 中華電信訓練所版
 
不用不可之 Fiddler Debugging Proxy!
不用不可之 Fiddler Debugging Proxy!不用不可之 Fiddler Debugging Proxy!
不用不可之 Fiddler Debugging Proxy!
 
Open platform
Open platformOpen platform
Open platform
 
Front-end Modular & Autmomated Development
Front-end Modular & Autmomated Development Front-end Modular & Autmomated Development
Front-end Modular & Autmomated Development
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)
 
Hack Day Sharing at D-Link
Hack Day Sharing at D-LinkHack Day Sharing at D-Link
Hack Day Sharing at D-Link
 

Debugging - 前端工程開發實務訓練

  • 1. 1 自我省視: 偵錯 前端工程開發實務訓練 (6) 講師:蔣定宇 / josephj Copyright © 2012 FITPI. All rights reserved.
  • 2. 2 偵錯 開發程式就是一連串的 try and error JavaScript 有哪些方法及工具能幫助我們解決問題呢? ๏ Log - 開發人員用的提示訊息 ๏ Error Handling - 錯誤處理機制 ๏ Breakpoint - 利用工具追蹤問題 ๏ Fiddler - 如何線上偵錯 Copyright © 2012 FITPI. All rights reserved.
  • 3. 3 Log 找問題最直覺的作法就是直接顯示訊息 可以很快地知道變數的值或有沒有跑到 Copyright © 2012 FITPI. All rights reserved.
  • 4. 4 alert(); 過去 JavaScript 還沒有良好偵錯環境的唯一作法 但因簡單及直覺的特性、到現在還是很常用 Copyright © 2012 FITPI. All rights reserved.
  • 5. 5 alert(); Copyright © 2012 FITPI. All rights reserved.
  • 6. 6 alert 的優缺點 ๏ 優點: ❖ 直覺:不用安裝、通用於每個瀏覽器。 ❖ 同步:可以暫停執行 JS 在目前的行數。 ๏ 缺點: ❖ 干擾:因同步、需要點選才能取消。 ❖ 很難對快速 loop 類型的程式做偵錯。 例如:音樂播放、拖拉、動畫... Copyright © 2012 FITPI. All rights reserved.
  • 7. 7 console.log(); 從 Firebug (火狐瀏覽器外掛) 開始所提供的功能 後來變成每個瀏覽器的標準、甚至在 Node.js 也可用 Copyright © 2012 FITPI. All rights reserved.
  • 8. 8 console.log(); http://getfirebug.com/wiki/index.php/Console_API 各大瀏覽器按 F12 都會有開發工具 Copyright © 2012 FITPI. All rights reserved.
  • 9. console.log 的優缺點 9 ๏ 優點: ❖ 干擾性低,大多數情況都適用。 ๏ 缺點: ❖ IE6, 7 不支援、甚至會產生錯誤。 ❖ 不是每個瀏覽器都直接可看。 ✦ Firefox 得安裝 Firebug。 ❖ 沒辦法 Block 後續 Script 執行。 ✦ 此時用 alert 即可。 ๏ 維護不易、寫多了反而一團亂。 上線後不應該存在。 Copyright © 2012 FITPI. All rights reserved.
  • 10. 10 Y.log(); YUI 內建改良版的 console.log。 Copyright © 2012 FITPI. All rights reserved.
  • 11. Log 會碰到的問題 11 超多的 Log,如何過濾? Copyright © 2012 FITPI. All rights reserved.
  • 12. 12 Y.log(); Y.log(<Message 訊息>, <Severity 等級>, <Group 組別>); Y.log(“...”, “info”, “#channel- player”); 稍微設定一下!只看其中一個模組的訊息 YUI({ logInclude: { “#channel-player”: true } }).use() Copyright © 2012 FITPI. All rights reserved.
  • 13. Y.log 的優點 13 ๏ 優點: ❖ 可依 Severity (info, warn, error) 分 類,開發工具可直接做 filter。 ❖ 可自訂 Group、透過 YUI 的 logInclude 或 logExclude 設定做分類。 ❖ 在使用 YUI 的前提下,每個瀏覽器都可以 用,即使 IE6-7 也不會有錯誤。 ❖ 即使在線上環境,也可透過 YUI 的 debug: false 把 log 關閉。 Copyright © 2012 FITPI. All rights reserved.
  • 14. 14 new Y.Console() 用 YUI 產生的 Console 可完全支援每一個瀏覽器 對於老舊瀏覽器或特殊情況 (嵌入式系統) 超好用 (new Y.Console()).render(); http://yuilibrary.com/yui/docs/console/ http://yuilibrary.com/yui/docs/console-filters/ 練習:http://f2eclass.com/lab/debug/console.html Copyright © 2012 FITPI. All rights reserved.
  • 15. 15 Log 心得分享 ๏ 建議盡量將程式的每個函式第一行、重要執行 點都放置 Log。類似足跡的概念、讓我們容易 去追蹤問題及了解結構。 ๏ 當程式中需要大量的 Log 時,請一定要指定 Severity 及 Group 參數,方便後續過濾。 ❖ YUI 的 logInclude, logExclude, debug 好用! ๏ loop 類的 Log (ex. 音樂播放進度事件)請自 行斟酌是否使用。 Copyright © 2012 FITPI. All rights reserved.
  • 16. 16 Error Handling 當程式發生了錯誤,我們該如何處理呢? Copyright © 2012 FITPI. All rights reserved.
  • 17. 17 Error 生命週期 瀏覽器錯誤 程式決定是否要往上丟 window.onerror JavaScript 開發人員可利用 程式決定是否要往上丟 try-catch 與 window.onerror try-catch 補抓並處理錯誤 錯誤發生 Copyright © 2012 FITPI. All rights reserved.
  • 18. try-catch 18 包覆在可能產生錯誤的程式碼外 參考資料:http://www.javascriptkit.com/javatutors/trycatch2.shtml try {     // 可能會產生錯誤的程式碼 } catch (error) {     // 當有錯誤的時候才會進入     // error 的屬性有 message 與 name     alert("錯誤類別為:" + error.name + ", 錯誤訊息為:" + error.message); } // 後續的程式碼仍然可以繼續執行(除非在 catch 中 return) 練習:http://f2eclass.com/lab/debug/try-catch.html Copyright © 2012 FITPI. All rights reserved.
  • 19. window.onerror 19 錯誤處理的最後一道防線 參考資料:http://dev.opera.com/articles/view/better-error-handling-with-window-onerror/ window.onerror = function (message, url, line) {     alert([         "JavaScript error: " + message,         " on line " + line,         " for " + url     ].join(""));     return false; // false 會繼續產生錯誤、true 則會壓抑錯誤 }; 練習:http://f2eclass.com/lab/debug/window-onerror.html Copyright © 2012 FITPI. All rights reserved.
  • 20. 20 錯誤處理心得分享 ๏ 將錯誤往上回報,避免只是 try-catch 壓抑。 ❖ throw new Error("使用者自定錯誤"); ๏ window.onerror 處理: ❖ 線上:隱藏錯誤、回報到伺服器。 ❖ 開發:顯示錯誤、開發人員必須處理掉。 ๏ 推薦投影片: ❖ http://www.slideshare.net/nzakas/enterprise- javascript-error-handling-presentation Copyright © 2012 FITPI. All rights reserved.
  • 21. 21 Breakpoint 現今的 Browser 都有更好的 Developer 工具了 可以用真正程式開發方式追蹤問題! 按 F12 打開(IE 8 以上及其他標準瀏覽器) Copyright © 2012 FITPI. All rights reserved.
  • 22. debugger; 22 用程式設定 Breakpoint http://blog.miniasp.com/post/2011/03/17/Using-JavaScript-debugger-statement-enter-breakpoints.aspx Copyright © 2012 FITPI. All rights reserved.
  • 23. 23 Breakpoint 中斷點 conditional breakpoint Step Control programming breakpoint Copyright © 2012 FITPI. All rights reserved.
  • 24. 24 Fiddler 每個 F2E 都應該活用 Fiddler Copyright © 2012 FITPI. All rights reserved.
  • 25. 25 Fiddler 是什麼? Fiddler 在你電腦上,相當於建立了虛擬的 Proxy、一但執 行,所有的網路封包都會經由此 Proxy 進出 => 只要會寫 JavaScript、你可以對你所瀏覽的網頁做任何事! Copyright © 2012 FITPI. All rights reserved.
  • 26. 26 JavaScript 程式碼被最小化怎麼辦? 線上環境都會壓縮程式碼、沒 Log,怎麼 Debug? Copyright © 2012 FITPI. All rights reserved.
  • 27. 27 AutoResponder 竄改網站回傳的 Response 3. 將 Session 拉到 AutoResponder 中 1. 右鍵 Unlock for Editing 2. 修改已經抓回來的 JavaScript 內容 Copyright © 2012 FITPI. All rights reserved.
  • 28. AutoResponder 28 顯示結果 未來每次 Reload 就會以你修改的程式來呈現 這對我們在 Production 做偵錯非常有幫助 Copyright © 2012 FITPI. All rights reserved.
  • 29. 29 AutoResponder 常用網站的樣式讓你不舒服?調整一下吧 Copyright © 2012 FITPI. All rights reserved.
  • 30. 30 練習:在 Y! 新聞加入 alert("被 Fiddler 改寫了!") Copyright © 2012 FITPI. All rights reserved.
  • 31. 31 Fiddler 的必備 Plugins ๏ JavaScript Formatter ๏ JSON Viewer ๏ Gallery http://www.fiddler2.com/fiddler2/extensions.asp Copyright © 2012 FITPI. All rights reserved.
  • 32. 32 JavaScript Formatter 整理壓縮過後的程式碼 xuite 首頁最小化過後的 JavaScript 本來只有一行的 JavaScript 被整裡的很漂亮 Copyright © 2012 FITPI. All rights reserved.
  • 33. 33 JSON Viewer 用樹狀圖觀看 Response資料 Copyright © 2012 FITPI. All rights reserved.
  • 34. 34 Gallery 直接看 Session 中的圖片 有圖有真相、顯示目前選取的圖 Copyright © 2012 FITPI. All rights reserved.
  • 35. 35 FiddlerScript 是 Fiddler 最強大的功能:可以自訂選單與功能 以下的功能是我為 miiiCasa 所製作,可節省許多開發時間 ๏ 塞入 miiiCasa Bar ๏ 不同開發人員環境的切換 ๏ 插入 Firebug Lite 或 YUI Console 等好用工具 ๏ 列出已翻譯、未翻譯的字串 ๏ 檢視模組資訊 ๏ JavaScript/CSS 壓縮與否的切換 Copyright © 2012 FITPI. All rights reserved.
  • 36. 塞入 miiiCasa Bar 36 本來必須透過 Router,用 Fiddler 模擬 2. 重新整理後,就會看到 miiiCasa Bar 出現在網頁左下方(此為點選後的狀況) 1. 選取顯示哪種環境的 miiiCasa Bar 3. 此時檢視原始碼就會看到我們剛塞入的內容 Copyright © 2012 FITPI. All rights reserved.
  • 37. 新增 Fiddler 選單 37 製作選單,變數會存在 INJECTION_HOST Copyright © 2012 FITPI. All rights reserved.
  • 38. 38 依據變數塞入 JS 依據 INJECTION_HOST 的不同,會塞入不同環境的 miiiCasa Bar 在 onBeforeResponse (輸出之前) 處理函式中 Copyright © 2012 FITPI. All rights reserved.
  • 39. 開發環境切換 39 快速切換團隊中不同工程師的開發環境 每個工程師都有自己的環境 以 Port 做區隔,像我是 5002* Copyright © 2012 FITPI. All rights reserved.
  • 40. 40 Fiddler 若是有個選單可隨時切換就太方便了! Copyright © 2012 FITPI. All rights reserved.
  • 41. 41 實際上是被 Fiddler 自動對應到 devm1.corp.miiicasa.com:50020 Copyright © 2012 FITPI. All rights reserved.
  • 42. 塞入 Debug Console 42 插入 Firebug Lite 或 YUI Console Firebug Lite 在像 IE6 的瀏覽器就特別有幫助 Copyright © 2012 FITPI. All rights reserved.
  • 43. 43 列出翻譯字串 設計多國語系時有特殊的 Class Name (.intl-translated, .intl-translatable) 還沒翻譯跟翻譯完成的會帶不同的 CSS Class Name 紅色表示還沒翻譯、綠色表示翻譯完成 點兩下可叫出翻譯工具 Copyright © 2012 FITPI. All rights reserved.
  • 44. 檢視模組資訊 44 列出有 id 屬性的 <div/>區塊,點兩下會出現 alert 視窗 在開發環境打入此指令就會自動把相關 案開好 Copyright © 2012 FITPI. All rights reserved.
  • 45. 45 切換壓縮與否 開發環境的 JS/CSS 預設都是動態合併多個小檔案並最小化過的。 http://a.mimgs.com/fuse?module=space&type=js 但是最小化會造成 Debugging 很困難 Copyright © 2012 FITPI. All rights reserved.
  • 46. 46 切換壓縮與否 其實只要多一個 &nominify 的參數即可回復正常 http://a.mimgs.com/fuse?module=space&type=js&nominify 但是每次都要手動改或動程式實在很麻煩! Copyright © 2012 FITPI. All rights reserved.
  • 47. 47 切換壓縮與否 有 Fiddler 真好!點選一下不用改程式碼就可以看到沒最小化的 http://a.mimgs.com/fuse?module=space&type=js FiddlerScript 也超簡單! Copyright © 2012 FITPI. All rights reserved.
  • 48. 48 練習:塞入 Firebug Lite ๏ 打開 CustomRule.js ( 點選 Rules > Custom Rules... ) ๏ 增加選單: 在 class Handler 的開頭加入以下程式碼、存檔,即可增加選項: public static RulesOption("Enable Firebug Lite") var IS_INCLUDE_FIREBUG: boolean = false; ๏ 在 HTML 中塞入 JavaScript: 找到 OnBeforeResponse 事件處理函式,在結束前加入連結中程式 碼:http://f2eclass.com/lab/debug/fiddler-firebug.txt ๏ FiddlerScript 官方文件: http://www.fiddler2.com/Fiddler/Dev/ScriptSamples.asp Copyright © 2012 FITPI. All rights reserved.
  • 49. 49 開發你的工具! 每個人的需求都不太一樣,這邊只是給你一些實作例子 你可以想想什麼東西可以為你自己與團隊帶來產值 然後利用 FiddlerScript 來實作! 類似的工具: Charles Debugging Proxy, mitmproxy Copyright © 2012 FITPI. All rights reserved.
  • 50. 50 偵錯 - Review ๏ Log - 各種訊息顯示機制與 YUI Console ๏ Error Handling - try-catch 與 window.onerror 如何使用 ๏ Breakpoint - 開發工具如何設定 breakpoint。(debugger;) ๏ Fiddler - 線上偵錯與自行開發工具 Copyright © 2012 FITPI. All rights reserved.
  • 51. 51 偵錯 - Review ๏ Log - 各種訊息顯示機制與 YUI Console ๏ Error Handling - try-catch 與 window.onerror 如何使用 ๏ Breakpoint - 開發工具如何設定 breakpoint。(debugger;) ๏ Fiddler - 線上偵錯與自行開發工具 Copyright © 2012 FITPI. All rights reserved.
  • 52. 52 Q&A Copyright © 2012 FITPI. All rights reserved.