JavaScript指令碼調試方法

來源:互聯網
上載者:User
 JavaScript指令碼調試方法

開發ASP.NET控制項是ASP.NET編程中底層的技術,控制項必須具備豐富的用戶端互動功能。可以直接在控制項中加入JavaScript標準,也可以把一些比較好的第三方用戶端組件集(如 Prototype.js和JQuery等)嵌入到控制項中,不管使用哪種方式,都要學會JavaScript調試技術。下面就講解一下JavaScript的各種調試技術。

首先設定IE,依次選擇"Tools"→"Internet Options"→"Advanced",找到Browsing下的兩個禁用指令碼調試複選框,取消對其的選擇(IE預設將這兩項選中,故不能進行指令碼調試),2-8所示。

圖2-8 "Internet Options"(瀏覽器選項)視窗

經過以上設定,取消IE預設的禁用功能,就可以調試指令碼了。

2.4.1 調試頁面中的JavaScript指令碼(方法一)

從頁面DebugControl.aspx中找到預置樣本指令碼時加入的ClientClickEvent用戶端方法。按F9鍵在alert語句中設定一個斷點,會發現在VS 2005中根本不能在頁面中設定斷點(VS 2008則直接可以設定斷點,就沒有VS 2005這樣麻煩,不過此方法也可以用於VS 2008)。沒關係,我們可以在alert語句之前加一句"debugger;"。修改後ClientClickEvent方法代碼如下:


  
  1. /// <summary>
  2. /// 獲得本書更多內容,請看:
  3. /// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
  4. /// </summary> 
  5. <script language="javascript">
  6.         function ClientClickEvent()
  7.         {          
  8.             debugger;  
  9.             alert('我被點擊了一下!');
  10.         }
  11. </script>

在瀏覽器運行DebugControl.aspx頁面,並單擊頁面中的按鈕,則程式在運行到"debugger;"語句後會彈出"選擇調試器視窗",2-9所示.
可以從上面視窗任意選擇一個調試器(以上只有VS調試器,如果安裝了其他調試器,則也會在這裡列出),選擇按鈕"是(Y)",程式即可在斷點中斷。

圖2-9 選擇調試器視窗

2.4.2 調試頁面中的JavaScript指令碼(方法二)

上一節所遇到的VS 2005(VS 2008之前版本)中不能在 *.aspx頁面中為用戶端指令碼設定斷點問題,是使用"debugger;"語句進行跟蹤調試來解決的。

在頁面運行之前是不能夠設定斷點的,但可以在運行後手動啟動調試器,這樣就可以設定斷點了。

按"Ctrl+F5"按鍵組合(與F5鍵的區別是不啟用跟蹤調試環境)運行頁面。在瀏覽器中呈現DebugControl.aspx測試頁面後,依次選擇瀏覽器的菜單"查看"→"指令碼偵錯工具"→"開啟"命令,2-10所示。

圖2-10 執行功能表命令

選擇命令後即可彈出"選擇調試器視窗"視窗(圖2-9),供選擇調試器,選擇"新執行個體Visual Studio 2005"項並單擊"是(Y)"按鈕,會彈出一個新的IDE環境。

在彈出的新IDE環境中找到alert語句,並在此語句設定一個斷點。然後切換到正開啟DebugControl.aspx頁面的瀏覽器,單擊"調試用戶端指令碼"按鈕,即可進行調試。

2.4.3 調試非嵌入式JavaScript指令檔

非嵌入式指令碼一般是指當前運行網站某個檔案夾下面的JavaScript檔案。

首先配置指令檔環境。建立一個指令檔Jscript.js,把頁面DebugControl.aspx中的ClientClickEvent方法複製到建立檔案,並將這個檔案引用到頁面中,如下所示:


  
  1. <script src=JScript.js type="text/jscript"></script>

調試JavaScript指令檔中的指令碼比較簡單,除了按照2.4.1節提到的用"debugger;"語句的方法,更簡單的方法是在要跟蹤調試的語句上按F9鍵設定一個斷點,再按F5鍵運行,程式運行到斷點後會自動中斷。

2.4.4 調試嵌入式JavaScript指令碼資源檔

嵌入式資源檔是指編譯到服務端控制項原始碼DLL中的資源,比片、樣式檔案、用戶端指令碼檔案等,這樣的好處是整個控制項最終只有一個DLL,易於部署,後面會有章節專門講解嵌入式資源,這裡僅說明其調試方法。

在VS 2008之前的版本,比如VS 2005預設是不可以調試嵌入式資源檔的,不過可以安裝能夠調試嵌入式資源檔的調試器,這裡推薦一個筆者經常使用的調試器 -- -- Office 2003安裝程式帶的調試器(安裝時從附帶的擴充工具裡找到它),安裝好之後即可以通過上面的方法進行調試。比如在嵌入式指令檔中使用debugger命令設定斷點後,程式運行到該語句時會彈出調試器選擇視窗,注意要選擇Microsoft Script Editor,2-11所示。

圖2-11 Office 2003中的指令碼調試器

對於VS 2008,則不用這麼麻煩,調試嵌入式資源檔的方式與調試非嵌入式資源檔完全相同,其餘的事情由VS 2008內部處理。

2.4.5 高效率調試的技巧

1.debugger提示

當控制項陳列庫比較大時,可以在一些關鍵的代碼地方設定一些debugger命令,並設定執行條件,從而避免每次手動輸入這些命令串,以及尋找關鍵的資料點,再設定斷點,這些操作都相當費時。另外,如果這些指令碼已經作為嵌入資源打包到DLL中,則無法設定斷點。下面這種方案可以解決這些問題,直接看一下例子:


  
  1. /// <summary>
  2. /// 獲得本書更多內容,請看:
  3. /// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
  4. /// </summary> 
  5. var StartDebugger = false;
  6. function Method1()
  7. {
  8.     //... ...
  9.     if(StartDebugger)
  10.     {
  11.         debugger;
  12.     }
  13.     //... ...
  14. }
  15.  
  16. function Method2()
  17. {
  18.     //... ...
  19.     if(StartDebugger)
  20.     {
  21.         debugger;
  22.     }
  23.     //... ...
  24.      if(StartDebugger)
  25.     {
  26.         debugger;
  27.     }
  28.     //... ...
  29. }
  30. function Method3()
  31. {
  32.     //... ...
  33.      if(StartDebugger)
  34.     {
  35.         debugger;
  36.     }
  37.     //... ...
  38. }

假設這是一些控制項中的指令碼函數,有"//... ..."標記的是省略的代碼。在方法外面定義了一個StartDebugger變數,並且設定其為false,這裡的StartDebugger變數就是一個普通的JavaScript變數。

經過以上設定,預設情況下由於StartDebugger值為false(初始化值),所以這些Method方法中的"debugger;"語句始終不會執行,這樣就可以把組件打包發給使用控制項的開發人員了。

假如使用控制項的開發人員遇到問題,需要我們協助,這時只需要在他出問題的頁面中加入如下代碼即可調試:


  
  1. <form id="form1" runat="server">
  2.     <script language=javascript>
  3.  
  4.         StartDebugger=true;
  5.  
  6.     </script>
  7. </form>

注意要保證"StartDebugger = true"在較晚的事件中執行,否則會報StartDebugger未定義錯誤。

使用這種方法就不用每次尋找關鍵斷點位置設斷點,為自己也為開發人員節省了時間。此方案是筆者的同事們比較喜歡使用的一種方案。

2.在IE地址欄中執行輸出指令碼

這裡主要使用地址欄執行指令碼的功能。請看圖2-12。StartDebugger是在頁面上定義的一個變數,先通過瀏覽器運行頁面後,再直接在地址欄中輸入圖2-12中的命令,即可得到StartDebugger的值,圖2-13是它的執行結果。

圖2-12 在瀏覽器地址欄中運行指令碼

 

圖2-13 瀏覽器地址欄中指令碼執行結果

這種方法的好處是不用啟動調試。如果繼續想看頁面中所有的東西,可以在瀏覽器中執行一個錯誤語句,比如把上面語句改為:

javascript:alert(abc);

由於abc在頁面上沒有定義,則系統會自動彈出調試器視窗,您可在此視窗選擇調試器並開始調試。

 

引用:http://msdn.microsoft.com/zh-cn/dd567278.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.