Zend Studio的遠程調試技術
當我們還在使用print_r、var_dump、echo和exit這些命令進行一些中間參數的調試輸出,并且樂此不疲的時候,或許我們不知道,我們的效率有多么低下,開發中有帶來了多大的不便。
盡管很多優秀的系統在開發中特意設置了debug mode或專門的debug function,但這些并沒有實質性的改善我們開發中遠程調試工作的紛繁蕪雜,盡管我們可以很負責任的說:一個優秀的系統需要長期的測試、調試來改善其性能,優化其算法,但也許我們花費的時間和所付出的勞動成倍卻并沒有取得多少的成效,當然我不是贊成在工作中的投機取巧,我是反對在工作中浪費時間,我們諸多的同仁們成天的“徜徉”在代碼的海洋里,廢寢忘食,認真的甚至有些不可理喻,我不知道這樣做的效率到底是多少?
Zend Studio的遠程調試功能是我們日常開發工作中一項頗為重要的功能,本文服務器端采用輕量級的zend debugger,我們先來看一個簡單的例子:
- <?php
- $i=0;
- do{
- echo $i++;
- }
- while($i<0);
- $i=0;
- while($i<0){
- echo $i++;
- }
- ?>
當我們非常覺得書上的說辭過于抽象我晦澀的時候,我們怎么才能比較直觀的知道這兩段代碼的執行流程是怎樣的呢?下面我們來試試zend studio(下簡稱zde)。
我先將上述代碼用zend studio保存于本機的http://localhost:8080/myphppro/debug.php位置,在zde中,選擇遠程調試菜單或工具菜單下的【調試URL...】命令,當然更方便也是本人最為推崇的方法是按F8,打開如圖1的調試URL對話框。
在瀏覽器打開位置中填寫http://localhost:8080/myphppro/debug.php,點擊確定,就啟動了調試會話,如圖2:
我們看到,變量窗口中除了幾個超全局變量以外,無他。這時我們按F10一次,光標就停留在了第4行(這就印證了書上說的do{}while型循環為“后判斷型循環”的說法),并且變量窗口出現了$i=(int)0,類型和值同時列出,相當詳細,如圖3所示:
這里甚至可以對$i進行重新賦值。再按一次F10,這時光標跳到了第7行,繼續按一下F10,光標到了第8行執行while循環前的判斷,再按F10,這時光標直接跳到了程序結尾,這也印證書上說的“while循環前先判斷”的說法,再次按下F10就結束遠程調試,輸出結果了,這時Zend studio自動退出調試環境,我們這次的遠程調試歷程也就結束了。應該是非常清晰的。
當然除了F10逐過程(所謂“逐過程”即遇到自定義函數、類或include包含文件時,直接步過執行到下一行)的調試執行,還有Ctrl+F5的無中斷執行(遇到斷點不中斷),F5執行(遇斷點即中斷),F11逐語句執行,Shift+F10轉到光標處(讓程序執行到光標處中斷),等等一些遠程調試執行方式,可以根據實際情況選擇。
這里補充講一下變量賦值的問題,當我們要改變程序執行過程中的中間值的時候,可以使用賦值命令(見圖3),賦值的時候要注意類型,當我們需要將123作為字符串復制給一個變量時,需要給它加上引號,如'123',數組賦值可以使用array()函數,另外,還有其他有趣的方法,等待您的摸索了。
【編輯推薦】