第12章非常規(guī)策略 當(dāng)你在調(diào)試中陷入困境時(shí),有時(shí)候必須采取一些非常規(guī)的手段。本章將要介紹一些調(diào)試技術(shù),當(dāng)你正常調(diào)試過程不能成功解決問題時(shí)可以嘗試使用這些技術(shù)。 首先,我想給我所謂的“非常規(guī)策略”(desperate measures)下—個(gè)準(zhǔn)確的定義是很重要的事。我們先來說說非常規(guī)策略不是什么:非常規(guī)策略不等于最后的方法。這些技術(shù)不是當(dāng)你放棄了所有的希望、不能想出其他任何辦法的...
第11章 COM調(diào)試 調(diào)試COM代碼對(duì)很多開發(fā)人員來說是很件令人沮喪的事情,特別是如果你對(duì)Windows平臺(tái),尤其是COM編程不熟悉的話。成功地解決一個(gè)錯(cuò)誤常常需要涉及到很多領(lǐng)域的知識(shí)和技巧,包括: ·對(duì)操作系統(tǒng)構(gòu)造的深刻理解,例如進(jìn)程、線程和DLL等。 ·對(duì)與COM編程有關(guān)的規(guī)則的深刻理解,例如引用計(jì)數(shù),內(nèi)存分配和線程。 ·對(duì)與網(wǎng)絡(luò)和安全有關(guān)的細(xì)節(jié)及其含義...
第10章調(diào)試多線程程序 線程。當(dāng)一個(gè)可憐的靈魂不得不在多線程環(huán)境中重現(xiàn)并診斷一個(gè)問題時(shí),一個(gè)像線程這樣優(yōu)雅的結(jié)構(gòu)所帶來的痛苦之大是令人驚奇的。無論設(shè)計(jì)多么簡(jiǎn)單而直接,在程序中多引入僅僅一個(gè)線程都會(huì)帶來令人吃驚的調(diào)試?yán)щy。所以,不管什么時(shí)候,做出在程序中使用多線程的決定都必須慎之又慎。 如果你沒有計(jì)算多線程將給程序的正確性帶來的影響和調(diào)試時(shí)將耗費(fèi)的額外時(shí)問,最好不要莽撞地引入多線...
第9章內(nèi)存調(diào)試 能夠方便高效地進(jìn)行動(dòng)態(tài)內(nèi)存分配,是C++編程語言的重要優(yōu)點(diǎn)之一;而調(diào)試時(shí)容易錯(cuò)誤使用動(dòng)態(tài)分配的內(nèi)存也是其最大的缺點(diǎn)之一。Windows程序也可能同樣存在與系統(tǒng)資源泄漏或者堆棧相關(guān)的內(nèi)存問題。內(nèi)存問題是Windows程序錯(cuò)誤的常見來源之一、而且如果沒有合適的工具進(jìn)行調(diào)試:它們將是最難以追蹤到的錯(cuò)誤之一。 動(dòng)態(tài)內(nèi)存分配錯(cuò)誤有以下兩種基本類型:內(nèi)存錯(cuò)誤和內(nèi)存泄露。當(dāng)一...
第三部分調(diào)試技術(shù)第8章基本調(diào)試技術(shù) 本章回答了很多Windows下調(diào)試程序的常見問題,主要是基本的調(diào)試技術(shù)。所以它看起來可能有點(diǎn)像Windows調(diào)試常見問題解答,其中很多是我在調(diào)試新聞組里見到的問題。8.1普通調(diào)試技術(shù)我應(yīng)該采取什么步驟使得我調(diào)試代碼的能力最大? 請(qǐng)釆取以下步驟: ·重定位你的程序的可執(zhí)行代碼以防止虛擬地址空間沖突。關(guān)于虛擬地址空間沖突和重...
本書由鐵文手打整理,僅為方便個(gè)人查閱摘錄如喜歡本書,請(qǐng)購買正版 第7章使用Visual C++調(diào)試器調(diào)試 如果要尋找并消除錯(cuò)誤,Visual C++調(diào)試器將是你最好的朋友。它有好幾個(gè)著名的特性使得它很高效,也很好用,下面是我喜愛它的一些原因: ·Visual C++調(diào)試器完全嵌入到了Visual C++開發(fā)環(huán)境,允許用戶直接從源代碼窗口使用調(diào)試器進(jìn)行設(shè)置斷點(diǎn)和...
本書由鐵文手打整理,僅為方便個(gè)人查閱摘錄如喜歡本書,請(qǐng)購買正版 第二部分調(diào)試工具第6章在Windows中調(diào)試 也許你以前還沒有遇到過下面所述的事情,但遲早有一天它會(huì)發(fā)生在你身上。你把你的程序給某個(gè)重要的人物使用,比如你最重要的客戶或者是你公司的老板,不幸的是,程序在他們那里運(yùn)行時(shí)崩潰了。他們記不起他們執(zhí)行了些什么操作,但有一點(diǎn)是肯定的,這個(gè)錯(cuò)誤很嚴(yán)重,而且,程序的崩潰導(dǎo)致...
本書由鐵文手打整理,僅為方便個(gè)人查閱摘錄如喜歡本書,請(qǐng)購買正版 第5章使用異常和返回值 在C++程序中,你可以使用異?;蚍祷刂祦矸祷貭顟B(tài)信息,在C語言程序出現(xiàn)的早期,返回一個(gè)函數(shù)狀態(tài)的最好方法就是它的返回值。使用這個(gè)函數(shù)的程序員不得不檢查返回值來確定這個(gè)函數(shù)是不是按照預(yù)想的正常工作?;贑語言的Windows API使用這種方式的另一種變體,那就是API函數(shù)返回一個(gè)...
第4章使用跟蹤語句 在20世紀(jì)70年代中期,C編程語言作為一種低層、多用途的編程語言出現(xiàn)。我并不知道第一個(gè)有意義的C語言程序是什么樣的,但我可以信誓旦旦地說它是有bug(錯(cuò)誤)的,而且作者肯定是使用printf命令行語句來對(duì)那些bug進(jìn)行調(diào)試的。同樣地,Microsoft Windows在80年代中期作為IBM個(gè)人計(jì)算機(jī)的圖形用戶接口出現(xiàn),我同樣不知道第一個(gè)有意義的Windows程序...
第3章使用斷言 在第2章“編寫便于調(diào)試的C++代碼”中,我介紹了早期Windows程序中的調(diào)試。在ANSI C出現(xiàn)之前,C語言的類型功能并不強(qiáng)大,也不支持函數(shù)原型。Windows程序都是在16位存儲(chǔ)介質(zhì)基礎(chǔ)上開發(fā)的,這里函數(shù)指針為長(zhǎng)指針,而數(shù)據(jù)指針為短指針。程序員必須像人工編譯器一樣,一行行地檢查代碼,保證所有的函數(shù)參數(shù)的數(shù)據(jù)類型都能匹配,指針長(zhǎng)度都正確,并且在必要的時(shí)候進(jìn)行強(qiáng)制類型轉(zhuǎn)換...
第2章編寫使于調(diào)試的C++代碼 毫無疑問,當(dāng)你在寫C++代碼的時(shí)候,你的頭腦中會(huì)考慮很多事情。代碼是否正確,是否執(zhí)行得是夠快,是否可靠,是否便于維護(hù),工程是否會(huì)按時(shí)完成,人們是否會(huì)喜歡這個(gè)結(jié)果?然而,調(diào)試這段代碼的能力應(yīng)該也在你的考慮之列。 C++是一種非同尋常的編程語言,有驚人的產(chǎn)生錯(cuò)誤和避免錯(cuò)誤的能力。在這一章里,我列舉幾種技術(shù)幫助你從戰(zhàn)略上書寫便于調(diào)試的C++代碼。這些技...
第一部分調(diào)試策略第1章調(diào)試的過程 雖然可能存在無數(shù)種錯(cuò)誤,與此對(duì)應(yīng),潛在的也存在無數(shù)種調(diào)試策略,但是大多數(shù)的錯(cuò)誤還是可以通過普通的調(diào)試過程來消除的。本章就來介紹這些過程。1.1錯(cuò)誤的調(diào)試五步曲 首先讓我們來看一下一個(gè)不太有效的調(diào)試過程。像Elisabeth Kuble-Ross在她的書《On Death and Dying》中提到的悲哀五步曲那樣,低效率調(diào)試過程的五步曲...
簡(jiǎn)介 錯(cuò)誤是無處不在的。程序產(chǎn)生錯(cuò)誤的原閔很多,也有很多防止、檢側(cè)和消除錯(cuò)誤的策略、工具和技術(shù)。隨著軟件開發(fā)技術(shù)的提高,軟件的復(fù)雜程度也提高了,調(diào)試工怍更難于進(jìn)行。程序員們?yōu)殚_發(fā)出完美的無錯(cuò)誤軟件而不懈地努力。伹這個(gè)目標(biāo)在現(xiàn)實(shí)中是很難實(shí)現(xiàn)的。 復(fù)雜性是開發(fā)無錯(cuò)誤軟件的主要障礙。即使是開發(fā)最普通的程序,不經(jīng)過細(xì)致的測(cè)試和調(diào)試,也不能斷定其中不含任何錯(cuò)誤。復(fù)雜龐大的程序是錯(cuò)誤產(chǎn)生率...
前言 調(diào)試Windows程序是項(xiàng)浩大、復(fù)雜的工程,一些介紹有關(guān)Windows調(diào)試的所有方面的書,動(dòng)輒就能達(dá)到這本書的兩倍厚。但是全面介紹的書籍有一個(gè)缺點(diǎn).就是它太厚了,令人望之生畏,恐怕很少有人想讀它。所以,這本書中,我們?nèi)Χ艘粋€(gè)范圍,將重點(diǎn)放在Windows調(diào)試的某些方面。下面介紹這個(gè)范圍是如何挑選的。 本書最基本的動(dòng)機(jī)建立在這樣的信念上:如果程序員能更好地獲取調(diào)試知識(shí),他...