在應用程式開發和除錯過程中,經常遇到這樣的問題:由於某個變數的值被錯誤地改變,導致程式出錯甚至crash,如果程式執行在多執行緒環境,或者程式邏輯非常複雜,我們想跟蹤這個變數的變化將會非常困難。有沒有辦法能夠在除錯過程中使程式自動在改變變數處斷點呢?這樣我們就能一一檢視該變數值的改變情況,從而發現到底是什麼時刻進行了錯誤的操作。
比較常用的方法可能是用trace等方法在改變值的地方輸出資訊,但是這樣就沒有了堆疊等除錯資訊,而且對於比較大型的程式,需要新增很多除錯語句,結果也不直觀。還可以在所有涉及到改變該值的語句前加上斷點,然後f5進行除錯。這種方法在大型程式面前似乎也很費力,況且如果程式中用到了引用等操作,斷點很難設定完整。
其實vc環境為我們提供了乙個非常好的工具完成這件事情。下面以vc2008為例進行說明。
1、在程式最先能夠watch這個變數的地方設定乙個斷點(或者是你認為合適的地方),f5執行程式;
2、在斷點處找到該變數,開啟breakpoints除錯視窗(可按alt+f9開啟),左上角有乙個「new」選單,選擇「new data breakpoint...」項,彈出視窗如下:
在其中的「address」處填入變數位址即可。注意一般c++的程式位址都是32位,因此下面兩個值都不用改動。如果覺得找變數的位址比較麻煩,可以簡單地填入「&+變數」,比如你要跟蹤乙個變數「ncount」的值,則填入「&ncount」即可。該處填寫的意思是:當填寫的位址所在變數的值有變化的時候,程式將自動斷點。
3、設定完後按f5繼續執行,當該值被改變時,將彈出對話方塊如下
確定後程式就會在相應的**處斷點,我們就可以方便地檢視call stack等當前程式資訊了。
當然,該方法對於跟蹤那些頻繁變化的變數不太合適,最適合那些變動較少,但是發生改變的條件比較複雜的變數。大家在以後的除錯過程中可以嘗試使用一下,在某些場合可能是其他方法不能比的。
python程式除錯方法總結
1.使用assert print eg err.py def foo s n int s assert n 0,n is zero return 10 n def main foo 0 執行方式 python err.py 如執行時使用 0 引數 python 0 err.py,則關閉assert,...
php程式除錯方法總結
相信很多朋友們都有除錯程式的經歷,然而很多時候除錯程式是痛苦而又漫長的過程 它不僅需要細心,更需要耐心,切忌心浮氣躁。但是當找出問題並順利解決它時,又會給人無比激動的喜悅。這裡總結一下筆者在程式除錯中的使用的原則,工具,以及方法。這裡需要說明的是,某些原則性的東西,各種語言都是差不多的,而涉及到具體...
程式除錯總結
基本上寫程式大部分時間都是在除錯上面,寫 也只是占用一部分時間。量比較大情況下或者一些隱蔽的bug,一般肉眼也很難看出來,所有除錯 是考驗乙個程式設計師的基本功和能力,是區分初級程式設計師和高階程式設計師的重要能力之一。大多數整合開發軟體的除錯方法都是大同小異,入門以vc6.0這個老古董的除錯開始就...