用慣了 vc++ 那方便的除錯環境, 尤其是vs 2005 debugger 使用起來更讓人得心應手。 在vs 2005 可以很方便的檢視變數值, 動態修改記憶體值,堆疊框架, 各種記憶體檢視視窗。更方便的是當滑鼠移動到變數立即顯示出變數的位址和該變數值,當該變數是結構體或類獲自定義結構時可以很方便的展開檢視。結構體的自動展開讓我們更快的了解目標變數的結構。
我通常每寫完乙個下函式或模組就 f5 除錯一下,仔細檢視各過程變數是否和自己預想的相同. 通過除錯可以:
(1) 可以很快地發現程式何處出錯
(2) 出現了什麼錯誤
(3) 動態跟蹤程式的執行,有助於檢查我們在寫**之前的邏輯思維是否正確,程式流程是否合理.
(4) 通過堆疊呼叫框架,可以確定是哪個函式模組出現了錯誤
(5) 更重要是,除錯使我們更進一步看清了程式本質,不再出現莫名其妙的錯誤.
(6) 除錯是學習組合語言很有效的途徑。
(7)
為我們建立了一種有關該語言的記憶體布局模型。使我們了解程式執行時記憶體是怎麼占用,堆疊情況.這樣出現錯誤時我們就清除錯誤出現的根源並可以很快給出解決方法,而不是像有些程式設計師把錯誤改正了還不知道為什麼隨處改了幾處**程式就執行 ok 了.
記得有一次寫乙個 delphi 呼叫 vc dll 的專案,忘了是哪個專案。當delphi 呼叫 vc提供的dll後,dll的匯出函式在執行期間沒有問題,可是在函式退出時卻出錯.(現在看來這 99.99% 是call convention 呼叫約定不同導致的). 可當時他們delphi 的人1個小時都沒有找出為什麼出錯。 實在不行了, 我開始和他們一起找錯,在同時的指導下我開始開啟delphi 的偵錯程式動態跟蹤程式流程。初次看 delphi 的彙編**有點頭疼(原來$ 等用於 c/c++ 的 0x, 表示是 16 進製). 我就用了 od (ollydbg ) 除錯。真是萬幸,od 可以原始碼級除錯, 並可以指定彙編**的型別. 用 od 跟蹤了程式的執行流程,發現函式返回後的返回位址出錯,呵呵現在問題根源找到了, vc dll 中的函式自己把引數退棧但同時delphi 的彙編**又一次把引數退棧,難怪會出現返回位址錯誤. 後來我把這個問題和相關的解決方法發到了網上. 整個解決過程不過 10 分鐘.
有的時候自己犯懶,在寫**之前不仔細考慮, 寫一點除錯一點. 現在我經常和公司新來的畢業大學生說: 即使**不會寫, 蒙也要蒙出來。 不管怎麼說乙個c /c++ 程式設計師最基本的技能就是熟練使用偵錯程式。現在我一有空就給他們講偵錯程式的用法包括系統級偵錯程式 windbg ,syser debuger。 softice 早已退出了歷史舞台,也只是給他們提一下曾經威震江湖的 softice 的輝煌歷史罷了。
在開發驅動時, 偵錯程式更是必不可, 如果連偵錯程式都不熟,奉勸還是去學習 vb 吧。
使用偵錯程式也並不是一件簡單的事情,至少要求你非常熟悉下面幾點:
(1) 清楚了解 什麼是堆疊,在程式執行時具體做什麼用
(2) 清楚了解 cpu 結構, 知道什麼是暫存器
(3) 清楚了解 組合語言, 不要看到彙編**就怕怕的
(4) 清楚了解 高階語言的**是怎樣在 cpu 上執行的
(5) 了解偵錯程式的實現原理和方法, 以應對除錯工具本身的出現的問題,更多時候是為了把偵錯程式作為它用。
(6) 清楚了解 可執行的檔案的 2 進製**結構,這樣我們可以把 逆向, 破解 等作為最有趣的休閒娛樂活動
相信上面的幾點不是很困難,即使很困難又怎麼樣,別人是人,你也是人,難道他會你就不會,真沒骨氣!!
有很多人稱是高手,連組合語言都不了解你還敢說!!丟人!! 不懂彙編別說你是學 c/c++,更別說是搞底層開發的,因為搞底層開發的弟兄們不能和你一起丟人.
我的遊戲雜想
網遊,應該是 娛樂,教育,傳媒。人在遊戲世界裡的化身是 滑鼠和鍵盤,遊戲規定好的頭像,衣服。現實中人通過視覺聽覺分辨不同的人,遊戲中通過id。現實人物在遊戲裡表現,如果通過攝像頭可能會對頻寬要求過高,而且成像質量不好。是否可以考慮使用簡單的人臉跟蹤技術,提取出眼瞼嘴巴肩膀手的動作,然後在對方的電腦上...
遊戲人生 dota雜想
有人戲說dota毀人一生,雖然聽起來有些誇張,可是確也反映了dota的影響力,至少我感覺自己受他影響太大了!中午12點後起床,隨便搞搞就直奔網咖,迎戰新的一天!新出來的天梯平台,個人感覺它做的不錯,只是這個不錯會讓更多玩家執著於它的天梯積分,那是彰顯自己實力的東東,那是聊以 的東東!為了它,每天只吃...
小計畫及雜想
昨天開始了 部落格,既然開始了就該做好,堅持寫下去。凡事預則立不預則廢 於是乎立了個小計畫 因為剛來到這裡,還是個小菜鳥,技術性的文章寫不來,可能開始會生活型的文章多一點。技術性的文章寫出來,畢竟是菜鳥,可能會出現概念不清或者其他錯誤,希望大家能夠給我指點。2 每週抽空看優秀博文。雜想昨晚和表哥吃了...