調試(xdebug)

調試

程序調試是將編制的程序投入實際運行前,用手工或編譯程序等方法進行測試,修正語法錯誤和邏輯錯誤的過程。這是保證計算機信息系統正確性的必不可少的步驟。編完計算機程序,必須送入計算機中測試。根據測試時所發現的錯誤,進一步診斷,找出原因和具體的位置進行修正。

原則
一,用頭腦去分析思考與錯誤徵兆有關的信息。
二,避開死衚衕。
三,只把調試工具當做手段。利用調試工具,可以幫助思考,但不能代替思考,因爲調試工具給的是一種無規律的調試方法。
四,避免用試探法,最多隻能把它當做最後手段。
五,在出現錯誤的地方,可能還有別的錯誤。
六,修改錯誤的一個常見失誤是隻修改了這個錯誤的徵兆或這個錯誤的表現,而沒有修改錯誤本身。如果提出的修改不能解釋與這個錯誤有關的全部線索,那就表明只修改了錯誤的一部分。
七,注意修正一個錯誤的同時可能會引入新的錯誤。
八,修改錯誤的過程將迫使人們暫時回到程序設計階段。修改錯誤也是程序設計的一種形式。
九,修改源代碼程序,不要改變目標代碼。

方法:
一,簡單調試方法:步驟
1,在程序中插入打印語句、優點是能夠顯示程序的動態過程,比較容易檢查源程序的有關信息。缺點是效率低,可能輸入大量無關的數據,發現錯誤帶有偶然性。
2,運行部分程序。有時爲了測試某些被懷疑有錯的程序段,卻將整個程序反覆執行許多次,在這種情況下,應設法使被測程序只執行需要檢查的程序段,以提高效率。
3,藉助調試工具。目前大多數程序設計語言都有專門的調試工具,可以用這些工具來分析程序的動態行爲。

二,回溯法排錯。確定最先發現錯誤症狀的地方,人工沿程序的控制流往回追蹤源程序代碼,直到找到錯誤或範圍。

三,歸納法排錯。是一種系統化的思考方法,是從個別推斷全體的方法,這種方法從線索(錯誤徵兆出發),通過分析這些線索之間的關係找出故障。主要有4步:
(1)收集有關數據。收集測試用例,弄清測試用例觀察到哪些錯誤徵兆,以及在什麼情況下出現錯誤等信息。
(2)組織數據。整理分析數據,以便發現規律,即什麼條件下出現錯誤,什麼條件下不出現錯誤。
(3)導出假設。分析研究線索之間的關係,力求找出它們的規律,從而提出關於錯誤的一個或多個假設,如果無法做出假設,則應設計並執行更多的測試用例,以便獲得更多的數據。
(4)證明假設。假設不等於事實,證明假設的合理性是極其重要的,不經證明就根據假設排除錯誤,往往只能消除錯誤的徵兆或只能改正部分錯誤。證明假設的方法是用它解釋所有原始的測試結果,如果能圓滿地解釋一切現象,則假設得到證明,否則要麼是假設不成立或不完備,要麼是有多個錯誤同時存在。

四,演繹法排錯。設想可能的原因,用已有的數據排除不正確的假設,精化並證明餘下的假設。

五、對分查找法。如果知道每個變量子啊程序內若干個關鍵點上的正確值,則可用賦值語句或輸入語句在程序中的關鍵點附近“注入”這些變量的正確值,然後檢查程序的輸出。如果輸出結果是正確的,則表示錯誤發生在前半部分,否則,不妨認爲錯誤在後半部分。這樣反覆進行多次,逐漸逼近錯誤位置

分類

靜態調試
可以採用如下兩種方法:
(1)輸出寄存器的內容。在測試中出現問題,設法保留現場信息。把所有寄存器和主存中有關部分的內容打印出來(通常以八進制或十六進制的形式打印),進行分析研究。用這種方法調試,輸出的是程序的靜止狀態(程序在某一時刻的狀態),效率非常低,不得已時才採用。
(2)爲取得關鍵變量的動態值,在程序中插入打印語句。這是取得動態信息的簡單方法,並可檢驗在某時間後某個變量是否按預期要求發生了變化。此方法的缺點是可能輸出大量需要分析的信息,必須修改源程序才能插入打印語句,這可能改變關鍵的時序關係,引入新的錯誤。

動態調試
通常利用程序語言提供的調試功能或專門的調試工具來分析程序的動態行爲。一般程序語言和工具提供的調試功能有檢查主存和寄存器;設置斷點,即當執行到特定語句或改變特定變量的值時,程序停止執行,以便分析程序此時的狀態。

Xdebug:
phpstrom中xdebug使用
https://note.youdao.com/ynoteshare1/index.html?id=fd94f6c8d2aae4baeaec62398a163c30&type=note

安裝配置:
https://www.cnblogs.com/grimm/p/6589259.html
學習文檔
詳細版
https://xdebug.org/docs/all
簡版
https://www.jianshu.com/p/53a9064cb4e7

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章