程序员调试能力和相关书籍
分享一下我老師大神的人工智能教程!零基礎(chǔ),通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉(zhuǎn)載本篇文章。分享知識(shí),造福人民,實(shí)現(xiàn)我們中華民族偉大復(fù)興!
樓主vcleaner(我沒(méi)當(dāng)大哥很久了.......)2005-05-23 09:09:42 在 VC/MFC / 基礎(chǔ)類 提問(wèn)在軟件行業(yè)中,個(gè)人覺(jué)得每個(gè)Coder、Leader(那些當(dāng)了Leader以后就不需要Code的除外)都應(yīng)該除了具有良好的編碼能力以外,最為主要的就是Debug的能力要堅(jiān)實(shí)。千萬(wàn)不要告訴我Debug工作是Tester和QA的事情,首先你要認(rèn)識(shí)到Debug的能力是一個(gè)并不簡(jiǎn)單的能力,能幫助你提高你的開(kāi)發(fā)能力,加快開(kāi)發(fā)速度,節(jié)約開(kāi)發(fā)成本;其次你更應(yīng)該知道,你所掌握的Debug的能力和技術(shù)并不可能搶去Tester或者QA的飯碗,他們做的工作更仔細(xì)、全面,更富有創(chuàng)造力。由于本人數(shù)年來(lái)一直使用VC6,所以下面使用的觀點(diǎn)和相關(guān)的描述都是從VC出發(fā)的,肯定有所偏頗、錯(cuò)誤之處,還望各位看官不吝嗇地指出,本人定虛心接受,共同討論,共同學(xué)習(xí),共同進(jìn)步。個(gè)人覺(jué)得Debug能力包括以下三個(gè)個(gè)方面: ?
? ?
? 1、良好的編碼習(xí)慣,良好的邏輯結(jié)構(gòu)能力,對(duì)Bug的預(yù)見(jiàn)能力。一個(gè)成熟的程序員,應(yīng)該有一個(gè)良好的編程習(xí)慣,不僅需要有良好的編碼格式規(guī)范,更為需要的是對(duì)于程序中的邏輯實(shí)現(xiàn)時(shí)候有一種良好的結(jié)構(gòu)。編程其實(shí)就是數(shù)據(jù)和邏輯的集合,數(shù)據(jù)的處理較為簡(jiǎn)單,或者說(shuō)是需要的邏輯思維能力比較少,當(dāng)算法邏輯要在數(shù)據(jù)上實(shí)現(xiàn)的時(shí)候,同一種邏輯,讓不同的程序員來(lái)實(shí)現(xiàn)可能有各種各樣的不同實(shí)現(xiàn)結(jié)構(gòu),從這個(gè)角度來(lái)說(shuō),這里所說(shuō)的“良好的編碼習(xí)慣”就應(yīng)該指的是對(duì)于邏輯實(shí)現(xiàn)時(shí)候使用的良好的編程結(jié)構(gòu),一個(gè)好的編程結(jié)構(gòu)應(yīng)該是能預(yù)防錯(cuò)誤的發(fā)生,對(duì)錯(cuò)誤的預(yù)見(jiàn)和錯(cuò)誤出現(xiàn)以后的錯(cuò)誤處理與異常處理的良好安排。也許有人說(shuō)這不好辦嗎?每個(gè)邏輯判斷的地方添加條件判斷或者異常處理不就行了?個(gè)人覺(jué)得不是那么回事,過(guò)多的if、assert、ASSERT等語(yǔ)句或者是宏,尤其是并列的if語(yǔ)句需要耗費(fèi)很多判斷、執(zhí)行的時(shí)間,對(duì)于一個(gè)子程序(函數(shù)),尤其是調(diào)用頻率比較頻繁的子程序(函數(shù)),一次浪費(fèi)了一點(diǎn)點(diǎn)時(shí)間,多次、頻繁地調(diào)用浪費(fèi)的時(shí)候就顯得可觀了,所以并不是if語(yǔ)句使用的多,程序出錯(cuò)的可能性就小,過(guò)猶不及!如果確實(shí)需要使用多個(gè)if語(yǔ)句進(jìn)行條件判斷,最好能使用嵌套的if語(yǔ)句,逐步的縮小判斷范圍,這樣消耗的時(shí)間要比并列的if語(yǔ)句要小,還要注意的是if語(yǔ)句的條件判斷也不是萬(wàn)能的;assert、ASSERT等判斷宏也不是萬(wàn)能的,它會(huì)造成Debug和Release版本在響應(yīng)速度和最終的編譯結(jié)果的不同,對(duì)于一些關(guān)注于性能、響應(yīng)速度的程序,所造成的影響是不可忽視的。不過(guò)開(kāi)發(fā)過(guò)程中的調(diào)試階段倒是提倡使用這些宏來(lái)發(fā)現(xiàn)算法錯(cuò)誤和不足。另外對(duì)于異常處理段的使用,個(gè)人覺(jué)得能不用異常處理的地方盡量不要使用異常處理,除非當(dāng)某個(gè)錯(cuò)誤發(fā)生以后導(dǎo)致程序不能繼續(xù)執(zhí)行或者是崩潰的時(shí)候才使用異常,有時(shí)候你能使用異常處理,將發(fā)生錯(cuò)誤的程序繼續(xù)執(zhí)行下去,但是可能產(chǎn)生的最后結(jié)果并不是客戶所需要或者是期望的,這樣就容易讓客戶產(chǎn)生質(zhì)疑:你是不是在程序中做了什么手腳?這也讓你失去了獲得Bug發(fā)生的前提狀況信息,從而失去了一次修改Bug的機(jī)會(huì),所以說(shuō)有時(shí)候當(dāng)程序發(fā)生錯(cuò)誤時(shí),僅僅彈出一個(gè)MessageBox提示一些信息,然后關(guān)閉程序,也不失為一個(gè)好的辦法。 ?
? ?
? 2、編碼過(guò)程中的調(diào)試跟蹤和錯(cuò)誤定位能力。這個(gè)能力主要就是在開(kāi)發(fā)過(guò)程中,當(dāng)自己在Build程序,Run起來(lái)以后,竟然發(fā)生了Bug或者是Memory ? Leak,這時(shí)候就需要你使用各種工具進(jìn)行調(diào)試跟蹤了。首先你要相信VC不僅是一個(gè)很好的IDE,也是一個(gè)很好的Debug工具,其提供的調(diào)用棧、條件斷點(diǎn)、數(shù)據(jù)斷點(diǎn)、反匯編等工具足夠強(qiáng)大,足夠應(yīng)付平常的Bug,但是現(xiàn)在很多的程序員,包括一些自稱為老程序員的也未必能很好的使用這些工具,尤其是條件斷點(diǎn)和數(shù)據(jù)斷點(diǎn)(在下面介紹的第二本書中有詳細(xì)的使用說(shuō)明)。當(dāng)VC不能滿足你的要求的時(shí)候你就需要使用其他的工具了,例如:SmartChecker,BoundChecker,Purify,SoftICE等等了。從這個(gè)角度來(lái)說(shuō),這里的“調(diào)試跟蹤能力”不僅是程序員對(duì)Bug的定位能力,更為主要的還是對(duì)于調(diào)試工具的掌握、使用的能力。“磨刀不誤砍柴工”,在開(kāi)發(fā)之前或者開(kāi)發(fā)閑暇時(shí),好好的研究一下一些開(kāi)發(fā)、調(diào)試工具不愧為一種好的提升這種能力的好辦法。能靜下心來(lái)思考一下這些工具的工作原理就更好了,這樣不僅能幫助你在編程的時(shí)候預(yù)見(jiàn)Bug,并且對(duì)你提高你的編程技巧也會(huì)有所幫助。例如VC中的程序在Debug模式下為什么能發(fā)現(xiàn)數(shù)組訪問(wèn)越界?這是因?yàn)樵贒ebug模式下,在分配數(shù)組所占用的內(nèi)存時(shí)候,編譯器在數(shù)組內(nèi)存的兩端分別加入了一個(gè)字節(jié)的越界判斷內(nèi)存。這也就是為什么很多的MFC程序在使用自定義消息的時(shí)候在Debug模式下沒(méi)有錯(cuò)誤而在Release模式下發(fā)生錯(cuò)誤的原因了。這里我還想說(shuō)一說(shuō)我最喜歡做的兩種調(diào)試方法:當(dāng)Bug出現(xiàn)的時(shí)候,首先確定Bug的位置,然后:A、注釋掉可能導(dǎo)致Bug的段落,在需要取得數(shù)據(jù)值的地方直接提供一個(gè)合理的值,然后看看程序是否能正確運(yùn)行,如此循環(huán)往復(fù),逐步縮小范圍,最終找出Bug所在;B、如果Bug被定位在一個(gè)小的功能、子程序或者函數(shù)中,可以使用新建一個(gè)Test工程,在一個(gè)完全“干凈”的環(huán)境下,對(duì)此功能、子程序或者函數(shù)進(jìn)行測(cè)試,找出Bug所在。此節(jié)最后我想說(shuō)的就是利用你的網(wǎng)絡(luò)。當(dāng)一個(gè)Bug出現(xiàn)時(shí),你也許感到茫然,也許感到無(wú)從下手,這時(shí)候你就可以利用的你網(wǎng)絡(luò)資源,使用強(qiáng)大的搜索引擎(比如Google、Baidu等等),輸入相關(guān)的錯(cuò)誤提示信息,也許搜索到類似問(wèn)題的網(wǎng)頁(yè),也許別人也遇到過(guò)同樣或者同類的問(wèn)題,其他人所提供的答案就是你所需要的,或者能給你以提示、啟發(fā)的! ?
? ?
? 3、對(duì)事后發(fā)生的Bug能有良好的感知能力。當(dāng)一個(gè)Bug出現(xiàn)的時(shí)候,優(yōu)秀的程序員能根據(jù)Bug發(fā)生的前提和Bug發(fā)生的時(shí)間點(diǎn)、程序中的位置,很好的感知到Bug可能發(fā)生在哪一個(gè)函數(shù)或者哪幾個(gè)函數(shù)中,是什么情況導(dǎo)致Bug的出現(xiàn)的,并且能夠很快的定位錯(cuò)誤并Fix這個(gè)錯(cuò)誤。這種能力使用的地方往往是程序已經(jīng)Release了,已經(jīng)被客戶使用了,在使用的過(guò)程中發(fā)生了Bug,客戶向你“傾訴”時(shí)。那么怎么才能有這樣的能力呢?也許很多的這種能力都是在你不斷的摔倒,被經(jīng)理P了N次以后,所積累起來(lái)的經(jīng)驗(yàn),所以說(shuō)這也是一種痛苦以后所獲得的快樂(lè)的能力,它需要你對(duì)自己所做的軟件產(chǎn)品的結(jié)構(gòu)、運(yùn)行條件、運(yùn)行原理和相關(guān)的涉及部分有很好的理解、掌握。有的時(shí)候多在網(wǎng)站上看看別人的經(jīng)歷也能有所收獲。 ?
? ?
? ? ? ? ? 在以上的三種能力中,第一種能力主要在于態(tài)度和思維能力,后兩種則偏向于學(xué)習(xí)能力和經(jīng)驗(yàn)的積累;個(gè)人覺(jué)得第一種最為重要,所謂的“態(tài)度決定一切”嘛,呵呵。 ?
? ?
? ? ? ? ? 最后向你推薦幾本關(guān)于調(diào)試的書籍: ?
? ?
? 1、《Writing ? Clean ? Code——Microsoft ? Techniques ? for ? Developing ? Bug-free ? C ? Programs》(中文版譯作《編程精粹——Microsoft編寫優(yōu)質(zhì)無(wú)錯(cuò)C程序秘訣》或者叫做《零錯(cuò)誤程序》)——這是一本出版很早的書,現(xiàn)在也許在書店中都看不到了,但是你要相信此書的作者Steve ? Maguire(曾是Microsoft資深的程序員,參加了Excel在多個(gè)平臺(tái)下的開(kāi)發(fā)和移植工作)所提供的許多防錯(cuò)、排錯(cuò)、測(cè)試的準(zhǔn)則還是能讓人從中獲益非淺的。作者將每章的要點(diǎn)都和自己實(shí)際工作經(jīng)歷相結(jié)合,提供了翔實(shí)的例子和相關(guān)代碼,使用的語(yǔ)言更是幽默風(fēng)趣,讓人讀起來(lái)不會(huì)感覺(jué)晦澀難懂,尤其是每章結(jié)束部分提供的練習(xí)和思考題更是貼合實(shí)際,發(fā)人深省。也就是這些原因才使得這本書經(jīng)久不衰,一直為廣大程序所喜愛(ài),所廣泛地討論。至今尚未能見(jiàn)到能與之相媲美的書籍。網(wǎng)上所流傳的林銳博士所著的《高質(zhì)量C++編程指南》和《軟件工程思想》在深度和廣度上與之相比也顯得遜色不少! ?
? ?
? 2、《Debugging ? Windows ? Programs》(中文版譯作《Windows程序調(diào)試》,中國(guó)電力出版社出版)——這是一本現(xiàn)在在書店很為流行的一本書。此書使用的語(yǔ)言比較樸實(shí)、易懂,也許是譯者精心處理的結(jié)果,敘述習(xí)慣比較符合國(guó)人口味。這本書主要包含調(diào)試策略、調(diào)試工具、調(diào)試技術(shù)三部分,本書主要介紹的是在VC這個(gè)IDE、編譯器下開(kāi)發(fā)程序所應(yīng)有的一些技術(shù)。看完此書你肯定會(huì)更為深入的了解MFC,了解結(jié)構(gòu)化異常和C++異常的區(qū)別和聯(lián)系,了解怎么調(diào)試多線程程序,怎么調(diào)試COM程序,怎么調(diào)試內(nèi)存,怎么調(diào)試?yán)L圖程序等等。不管你是自認(rèn)為有多年的開(kāi)發(fā)經(jīng)驗(yàn)的開(kāi)發(fā)高手,還是剛剛?cè)腴T的初學(xué)者,相信只要你耐心的看完此書,你一定會(huì)和我一樣深深的感嘆一句:原來(lái)VC的調(diào)試功能這么強(qiáng)大!如果早點(diǎn)看到這本書就好了! ?
? ?
? 3、《Debugging ? Applications》(本人尚未見(jiàn)到中文版)——這本書主要介紹的是VC和VB的調(diào)試,其中VC的調(diào)試占到70%-80%左右。本書也分為三部分:Debug的形式,強(qiáng)有力的Debug,Debug的工具和技術(shù)。其中有部分內(nèi)容和上一本書所說(shuō)的相同。但是這本書還是提供了很多新的東西:介紹了遠(yuǎn)程調(diào)試,提供了一些新的工具使用例子的說(shuō)明,介紹了更多的底層的東西,甚至涉及匯編的相關(guān)信息的閱讀和理解。在閱讀了上一本書以后,如果你還想提高,這本書是你不錯(cuò)的選擇。 ?
? ?
? ? ? ? ? 第一本書主要就是培養(yǎng)大家第一種Debug能力的,后兩本書是培養(yǎng)大家第二種Debug能力的,對(duì)于第三種能力主要還是要靠經(jīng)驗(yàn)的積累。 ?
? ?
? ? ? ? ? 我現(xiàn)在就看到這三本書是比較好的書,如果你覺(jué)得有其他的比較好的相關(guān)書籍或者相關(guān)信息請(qǐng)告知我。在肯定這幾本書對(duì)你的開(kāi)發(fā)過(guò)程會(huì)有所幫助的前提下,另外我想說(shuō)的就是即使你看了這幾本書你也不會(huì)編寫出完全沒(méi)有Bug的程序,畢竟Bug的種類和發(fā)生的情況實(shí)在是有很多的客觀和主觀因素,不可能完全杜絕。程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的工作,唯有在工作、實(shí)踐過(guò)程中總結(jié)教訓(xùn),總結(jié)經(jīng)驗(yàn)才能不斷提高。祝大家在獲得知識(shí),積累經(jīng)驗(yàn)的過(guò)程中少走彎路,大踏步的前進(jìn)!!! ?
? ?
? (本文版權(quán)歸作者所有,如需轉(zhuǎn)載請(qǐng)注明作者和出處,否則也可以轉(zhuǎn)載,但千萬(wàn)不要標(biāo)注為你個(gè)人的作品,否則產(chǎn)生的一切后果請(qǐng)自負(fù),尤其是被BS、被扔臭雞蛋的時(shí)候,千萬(wàn)不要怨恨我,同時(shí)作者我還保留BS你的權(quán)利,^_^) ?
? 問(wèn)題點(diǎn)數(shù):200、回復(fù)次數(shù):68Top
1 樓vcleaner(我沒(méi)當(dāng)大哥很久了.......)回復(fù)于 2005-05-23 09:09:56 得分 0
至于為什么會(huì)在本文的結(jié)束部分使用那段版權(quán)申明,主要是因?yàn)榍岸螘r(shí)間我發(fā)現(xiàn)我以前寫的一些文章被轉(zhuǎn)載在個(gè)別的網(wǎng)站上而沒(méi)有注明出處和作者,甚至個(gè)別人在自己的Blog上直接將我的文章Copy、Paste為自己的作品。本人甚是BS類似的人和相關(guān)的網(wǎng)站,因?yàn)樗麄兛赡苓B最為簡(jiǎn)單的測(cè)試和驗(yàn)證都沒(méi)有進(jìn)行就相信了我所說(shuō)的一切,甚至連最明顯的遺漏的單詞和語(yǔ)句都沒(méi)有添加上,導(dǎo)致我比較拙劣的文筆暴露在大庭廣眾之下,使我身心受到很大的傷害,呵呵,所以此次添加了這個(gè)版權(quán)申明。添加這個(gè)版權(quán)申明并不表示我反對(duì)轉(zhuǎn)載、Copy/Paste我的文章,我甚至還期望你們這樣做,但是請(qǐng)?jiān)谧鲞@件事情之前,仔細(xì)閱讀、思考我的文章中所說(shuō)的東西,修改、驗(yàn)證其中你認(rèn)為錯(cuò)誤或者不足的地方,以免因?yàn)槲业闹R(shí)的不足而寫出的文章,加上你們的強(qiáng)大的傳播能力,導(dǎo)致更多的人,尤其是初學(xué)者誤入歧途,多走彎路,那就違背了我寫這些文章的初衷了。Top
2 樓vcleaner(我沒(méi)當(dāng)大哥很久了.......)回復(fù)于 2005-05-23 09:10:48 得分 0
歡迎大家指教,提出不同觀點(diǎn),相互討亂,相互學(xué)習(xí),共同提高!Top
3 樓huaboy2004(華少)回復(fù)于 2005-05-23 09:12:51 得分 3
收藏Top
4 樓vcleaner(我沒(méi)當(dāng)大哥很久了.......)回復(fù)于 2005-05-23 09:14:40 得分 0
關(guān)于文中所提及的第一本書和第三本書都有電子版,如果哪位兄弟能提供FTP,本人將其上傳,造福更多兄弟就更好了!Top
5 樓pomelowu(羽戰(zhàn)士)回復(fù)于 2005-05-23 09:26:11 得分 3
馬人口Top
6 樓vcleaner(我沒(méi)當(dāng)大哥很久了.......)回復(fù)于 2005-05-23 09:28:23 得分 0
馬人口????Top
7 樓pomelowu(羽戰(zhàn)士)回復(fù)于 2005-05-23 09:28:39 得分 3
寒~~~我原意是寫mark……Top
8 樓djfu(一馬平川)回復(fù)于 2005-05-23 09:41:55 得分 10
我記得有一本叫做《程序調(diào)試思想與實(shí)踐》的外國(guó)人寫的書,也不錯(cuò)。不過(guò)買了以后,看了才1半。Top
9 樓djfu(一馬平川)回復(fù)于 2005-05-23 09:42:36 得分 3
到現(xiàn)在看了才一半,發(fā)現(xiàn)那本書還不錯(cuò)。,Top
10 樓koko1998(高價(jià)購(gòu)買火車票)回復(fù)于 2005-05-23 09:43:07 得分 3
mark ?
? ?
? Top
11 樓xxrl()回復(fù)于 2005-05-23 09:49:37 得分 3
馬人口Top
12 樓russule(雨田)回復(fù)于 2005-05-23 10:01:55 得分 3
markTop
13 樓VCSQLVB(深谷清音(誰(shuí)知還是難脫俗塵))回復(fù)于 2005-05-23 12:14:42 得分 3
MARKTop
14 樓shinubi_love(史酷比)回復(fù)于 2005-05-23 12:18:10 得分 3
收藏Top
15 樓oyljerry(【勇敢的心】→ ㊣提拉米蘇√㊣)回復(fù)于 2005-05-23 12:20:06 得分 3
不錯(cuò)啊,spTop
16 樓laogong165(歪鍋配翹蓋,好鍋頭有好鍋蓋!)回復(fù)于 2005-05-23 12:20:32 得分 3
馬人口Top
17 樓oyljerry(【勇敢的心】→ ㊣提拉米蘇√㊣)回復(fù)于 2005-05-23 12:24:55 得分 3
幾天沒(méi)見(jiàn)樓主上CSDN了啊,一回來(lái)就給大家?guī)Ш脰|西啊 ?
? 贊一個(gè)Top
18 樓bohut(●伯虎● )回復(fù)于 2005-05-23 12:24:58 得分 3
upTop
19 樓yuanxiaojin(金子)回復(fù)于 2005-05-23 13:37:06 得分 3
摟主高人啊,謝謝!Top
20 樓erben(喝口蒙牛超級(jí)女生的酸酸乳)回復(fù)于 2005-05-23 14:39:46 得分 3
markTop
21 樓vcleaner(我沒(méi)當(dāng)大哥很久了.......)回復(fù)于 2005-05-23 16:16:27 得分 0
是有很多天沒(méi)有上CSDN了,到了新公司以后比較忙! ?
? 就是偶爾來(lái)一次也是忙里偷閑,偷偷的上!呵呵。Top
22 樓xjbx()回復(fù)于 2005-05-24 09:35:42 得分 3
寫的不錯(cuò)! ?
? ?
? 你可以把第3本書的電子版發(fā)給我么?謝謝!jbnet@tom.comTop
23 樓xjbx()回復(fù)于 2005-05-24 09:36:57 得分 3
不好意思mail寫錯(cuò)了。應(yīng)該是:xjbnet@tom.comTop
24 樓qrlvls( 空 氣 )回復(fù)于 2005-05-24 09:40:31 得分 3
來(lái)來(lái)來(lái),支持一把Top
25 樓krh2001(邊城浪子)回復(fù)于 2005-05-24 09:57:05 得分 3
支持... ? ? ?
? ?
? 很多時(shí)候花在調(diào)試上的時(shí)間比編碼要多得多,還要痛苦, ? 調(diào)試確實(shí)是很有學(xué)問(wèn)的.Top
26 樓AntonlioX(做人要厚道)回復(fù)于 2005-05-24 10:00:46 得分 3
寫的不錯(cuò)! ?
? Top
27 樓raymond323(raymond)回復(fù)于 2005-05-24 10:21:35 得分 5
c++程序調(diào)試Top
28 樓ayanamiwww(咩~咩『抵制日貨』)回復(fù)于 2005-05-24 12:00:31 得分 3
大哥,是你的帖,能不頂嗎? ?
? ?
? 馬人口,哈哈~~Top
29 樓laiyiling(Graphics ◎ Multimedia)回復(fù)于 2005-05-24 12:19:03 得分 3
好東西,支持一下!Top
30 樓ayanamiwww(咩~咩『抵制日貨』)回復(fù)于 2005-05-24 12:45:26 得分 20
詳細(xì)看了兩遍大哥你的文章,挺有同感,但是小弟水平肯定沒(méi)法和大哥比..... ?
? ?
? ?
? 不敢發(fā)表什么高論,只是想說(shuō)一下自己常用的方法。 ?
? ?
? 針對(duì)有很多時(shí)候,錯(cuò)誤都針對(duì)不同的客戶才出現(xiàn)(同一套系統(tǒng)),所以我除了上述方法外,更趨向于采用寫文件進(jìn)行Debug的方式,把可能出現(xiàn)問(wèn)題的地方通過(guò)日志來(lái)定位(由于有些問(wèn)題不是馬上能出現(xiàn),出現(xiàn)的時(shí)間也很Random),還有就是在程序中定義一個(gè)Log的Dlg,用于實(shí)時(shí)的調(diào)試日志。 ?
? ?
? 方法有點(diǎn)笨,但是對(duì)于處理實(shí)際的情況還不錯(cuò)。 ?
? ?
? 就說(shuō)那么多,聆聽(tīng)大家的高見(jiàn)。Top
31 樓bulepaper(雷鳥)回復(fù)于 2005-05-24 12:49:14 得分 3
頂 ? ? ? ?
? 我一直覺(jué)得自己寫的代碼,就應(yīng)該自己排錯(cuò)!!Top
32 樓ayanamiwww(咩~咩『抵制日貨』)回復(fù)于 2005-05-24 14:45:29 得分 3
好帖沒(méi)人頂呢,我頂~ ?
? ?
? 收藏Top
33 樓greenteanet(扎扎實(shí)實(shí)打基礎(chǔ),保持一顆平常心。)回復(fù)于 2005-05-24 15:01:06 得分 3
支持..Top
34 樓horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))回復(fù)于 2005-05-24 15:12:08 得分 3
支持.Top
35 樓wuchi(風(fēng)云)回復(fù)于 2005-05-24 16:03:03 得分 3
定Top
36 樓nextel(一切都只是感覺(jué)!)回復(fù)于 2005-05-24 17:19:23 得分 3
COPYTop
37 樓bobob(靜思)回復(fù)于 2005-05-24 17:31:02 得分 3
收藏Top
38 樓angelcool(快樂(lè)需要?jiǎng)?chuàng)造)回復(fù)于 2005-05-24 17:33:15 得分 3
mark ? 先Top
39 樓vcleaner(我沒(méi)當(dāng)大哥很久了.......)回復(fù)于 2005-05-25 08:51:28 得分 0
to ? ayanamiwww: ?
? 這里沒(méi)有什么所謂的水平高低,每個(gè)人都有自己的長(zhǎng)處、優(yōu)點(diǎn),每個(gè)人都有自己擅長(zhǎng)的某一方面,只是有的人愿意總結(jié),拿出來(lái)和別人分享、討論。我覺(jué)得知識(shí)唯有不斷的論證才能進(jìn)步。軟件這個(gè)行業(yè)的理論、思想發(fā)展的很快,有些以前正確的理論,在現(xiàn)金未必是正確的,一些對(duì)你是正確的理論,由于其約束性,對(duì)于別人未必是正確的。所以需要分享、論證!Top
40 樓chuanke((C ) 2005【空間代數(shù)】. All rights reserved .)回復(fù)于 2005-05-25 11:15:00 得分 3
建議共享一下資源哈[電子書]Top
41 樓chuanke((C ) 2005【空間代數(shù)】. All rights reserved .)回復(fù)于 2005-05-25 11:17:01 得分 0
順道問(wèn)個(gè)問(wèn)題哈。 ?
? ?
? 這個(gè)問(wèn)題已經(jīng)困擾我很久了我也嘗試過(guò)了很多方法,但都未果,希望大家能指點(diǎn)一下方向。 ?
? 問(wèn)題是這樣的:我想做個(gè)微軟播放器全屏?xí)r上下兩個(gè)彩色條,當(dāng)鼠標(biāo)移動(dòng)時(shí),它自動(dòng)彈出,此時(shí)你可以控制暫停/播放等,當(dāng)鼠標(biāo)不動(dòng)后一秒左右,它自動(dòng)隱藏,我不知道他的那個(gè)彩色條是個(gè)什么控件之類的,能幫我看看嗎?謝謝Top
42 樓miladuo(辭職ing)回復(fù)于 2005-05-25 11:34:37 得分 2
支持Top
43 樓ttfy1234(我自將心對(duì)明月,奈何明月照溝渠!)回復(fù)于 2005-05-25 13:49:17 得分 2
不知道該怎么申明作者名呢~~Top
44 樓vcleaner(我沒(méi)當(dāng)大哥很久了.......)回復(fù)于 2005-05-25 14:22:09 得分 0
建議共享一下資源哈[電子書] ?
? =============== ?
? 如果哪位兄弟能提供FTP,本人將其上傳,如果是發(fā)送郵件,那就算了,呵呵,新公司的管理比較嚴(yán)。 ?
? ?
? 不知道該怎么申明作者名呢~~ ?
? =============== ?
? 使用: ?
? CSDN ? vcleaner ? (我沒(méi)當(dāng)大哥很久了.......)Top
45 樓ricky20045(熱情的沙漠)回復(fù)于 2005-05-25 14:25:03 得分 2
學(xué)習(xí)!收藏Top
46 樓MikeChen2003(asdghgdhf)回復(fù)于 2005-05-25 15:42:02 得分 3
markTop
47 樓Featured(我握著愛(ài)情的門票靜靜排隊(duì)……)回復(fù)于 2005-05-27 21:47:01 得分 5
我甚是贊同樓主的觀點(diǎn), ?
? 事實(shí)上,我認(rèn)為調(diào)試水平最能反映一個(gè)程序員的功力高低。 ?
? 我的意思是,寫點(diǎn)兒代碼誰(shuí)都會(huì),關(guān)鍵是需要培養(yǎng)調(diào)試能力。Top
48 樓madoldman(瘋癲叟)回復(fù)于 2005-05-27 22:20:28 得分 2
upTop
49 樓yujia120(永不停息)回復(fù)于 2005-05-28 01:27:48 得分 2
好Top
50 樓luolovegui(駱歸)回復(fù)于 2005-05-28 03:54:11 得分 2
jf,upTop
51 樓xlzxlich(陽(yáng)光)回復(fù)于 2005-05-28 04:05:21 得分 10
贊同樓主的觀點(diǎn)。 ?
? 補(bǔ)充一句:一個(gè)設(shè)計(jì)良好的數(shù)據(jù)結(jié)構(gòu),會(huì)給程序設(shè)計(jì)和以后的調(diào)試帶來(lái)事半功倍的效果。 ?
? 一家之言,歡迎批評(píng)指正。Top
52 樓cxf1976()回復(fù)于 2005-05-28 08:56:51 得分 30
樓主的觀點(diǎn)基本贊同。 ?
? 不過(guò)遺漏了一個(gè)重要方面,匯編調(diào)試。 ?
? 很多bug不進(jìn)行匯編跟蹤是看不出來(lái)的,比如有的bug在Debug版下沒(méi)有問(wèn)題,在release版下有問(wèn)題,怎么辦?手工下斷點(diǎn),進(jìn)行匯編調(diào)試,找出問(wèn)題。還有一種情況,release程序正常運(yùn)行,但在某個(gè)時(shí)刻發(fā)生異常崩潰,你怎么辦?看drwtsn32的故障轉(zhuǎn)儲(chǔ)文件,也要分析匯編代碼。 ?
? 對(duì)于軟件調(diào)試,如果不考慮軟件邏輯/算法的問(wèn)題,僅就軟件本來(lái)說(shuō)可以按照下面的步驟進(jìn)行的: ?
? 代碼調(diào)試(編譯能否通過(guò))-->內(nèi)存調(diào)試(數(shù)據(jù)處理是否正確,堆棧是否正常)--->寄存器調(diào)試(寄存器內(nèi)容是否正確)。 ?
? ?
? ?
? ...例如VC中的程序在Debug模式下為什么能發(fā)現(xiàn)數(shù)組訪問(wèn)越界?這是因?yàn)樵贒ebug模式下,在分配數(shù)組所占用的內(nèi)存時(shí)候,編譯器在數(shù)組內(nèi)存的兩端分別加入了一個(gè)字節(jié)的越界判斷內(nèi)存。這也就是為什么很多的MFC程序在使用自定義消息的時(shí)候在Debug模式下沒(méi)有錯(cuò)誤而在Release模式下發(fā)生錯(cuò)誤的原因了... ?
? ---------------------------------------------------------------------------- ?
? 我不知道數(shù)組越界的這種發(fā)現(xiàn)方法,據(jù)我了解一般是破壞堆棧后,引發(fā)GP錯(cuò)誤,從而發(fā)現(xiàn)問(wèn)題。不知道你說(shuō)的這個(gè)字節(jié)的內(nèi)容是什么?誰(shuí)來(lái)判斷?什么規(guī)則? ?
? 至于mfc消息的問(wèn)題,在下覺(jué)得原因是函數(shù)實(shí)現(xiàn)出問(wèn)題了,導(dǎo)致壓棧錯(cuò)誤。比如消息函數(shù)的本來(lái)原型是LRESULT ? Onxxxx(WPARAM ? w, ? LPARAM ? l),可是我們通常因?yàn)椴恍枰獏?shù)傳遞,就簡(jiǎn)化為void ? Onxxxx(),這樣就會(huì)出問(wèn)題的,mfc的機(jī)制對(duì)于自定義消息,要求兩個(gè)參數(shù),而現(xiàn)在沒(méi)有,壓棧的時(shí)候就會(huì)出問(wèn)題。 ?
? 一些個(gè)人看法,共同討論。Top
53 樓cxf1976()回復(fù)于 2005-05-28 08:59:12 得分 2
另外強(qiáng)烈推薦VC,除了一些系統(tǒng)級(jí)調(diào)試不能做之外,其他的問(wèn)題都可以解決。Top
54 樓celerityok(敏行)回復(fù)于 2005-05-31 16:21:16 得分 2
mark!Top
55 樓huyansoft(天蝎座)回復(fù)于 2005-06-05 15:59:36 得分 2
好貼,頂!Top
56 樓zengwujun(月之海 為linux入門奮斗100天)回復(fù)于 2005-06-05 16:07:11 得分 2
markTop
57 樓Tranquillo(晚起的鳥兒找蟲吃)回復(fù)于 2005-06-05 19:07:45 得分 2
我覺(jué)得你自己寫的程序沒(méi)有理由調(diào)不好,就這么簡(jiǎn)單 ?
? 當(dāng)然前提是系統(tǒng)設(shè)計(jì)、模塊組織合理,對(duì)調(diào)試工具熟悉,當(dāng)然有些錯(cuò)誤像數(shù)組越界很隱蔽,需要吃一塹長(zhǎng)一智,編碼和調(diào)試其實(shí)是一個(gè)有機(jī)整體,光管寫不管能不能運(yùn)行那叫編程嗎?!Top
58 樓vcleaner(我沒(méi)當(dāng)大哥很久了.......)回復(fù)于 2005-06-14 09:11:44 得分 0
我不知道數(shù)組越界的這種發(fā)現(xiàn)方法,據(jù)我了解一般是破壞堆棧后,引發(fā)GP錯(cuò)誤,從而發(fā)現(xiàn)問(wèn)題。不知道你說(shuō)的這個(gè)字節(jié)的內(nèi)容是什么?誰(shuí)來(lái)判斷?什么規(guī)則? ?
? ============================================ ?
? 我的理解GP錯(cuò)誤是針對(duì)操作系統(tǒng)的。在當(dāng)前的操作系統(tǒng)下,每個(gè)進(jìn)程有4G的進(jìn)程空間,但是有相當(dāng)一部分是不能直接有進(jìn)程訪問(wèn)的,具體的分配參見(jiàn)《Windows核心編程》,這時(shí)候如果訪問(wèn)了這個(gè)空間就會(huì)產(chǎn)生GP錯(cuò)誤。但是數(shù)組越界缺不是這么回事,它訪問(wèn)的空間是仍然可以由進(jìn)程訪問(wèn)的,但是無(wú)意間越界了,這時(shí)候一般不會(huì)出現(xiàn)問(wèn)題,只是響應(yīng)的值可能是錯(cuò)誤的,這種錯(cuò)誤可以通過(guò)在數(shù)組兩端設(shè)置兩個(gè)越界的判斷內(nèi)存Byte來(lái)判斷,具體就是在這兩個(gè)Byte中寫入特別的數(shù)值,作為判斷標(biāo)志。具體原理和內(nèi)容參考《零錯(cuò)誤程序》!! ?
? ?
? 至于mfc消息的問(wèn)題,在下覺(jué)得原因是函數(shù)實(shí)現(xiàn)出問(wèn)題了,導(dǎo)致壓棧錯(cuò)誤。比如消息函數(shù)的本來(lái)原型是LRESULT ? Onxxxx(WPARAM ? w, ? LPARAM ? l),可是我們通常因?yàn)椴恍枰獏?shù)傳遞,就簡(jiǎn)化為void ? Onxxxx(),這樣就會(huì)出問(wèn)題的,mfc的機(jī)制對(duì)于自定義消息,要求兩個(gè)參數(shù),而現(xiàn)在沒(méi)有,壓棧的時(shí)候就會(huì)出問(wèn)題。 ?
? ============================================= ?
? 那你想過(guò)為什么在Debug模式下沒(méi)有問(wèn)題嗎?同樣也需要壓棧!Top
59 樓vcleaner(我沒(méi)當(dāng)大哥很久了.......)回復(fù)于 2005-06-14 09:14:22 得分 0
歡迎象 ? cxf1976() ? 這樣的同志參與,共同討論,共同進(jìn)步。大家也不要盡信我所說(shuō)的一切都是正確的。即使現(xiàn)在是正確的也不能保證以后是正確的,畢竟一切都是在改變中的,編程的基礎(chǔ)就是OS所提供的API接口,OS的內(nèi)核都在改變,沒(méi)有什么是不改變的,呵呵。Top
60 樓vcleaner(我沒(méi)當(dāng)大哥很久了.......)回復(fù)于 2005-06-14 09:22:18 得分 0
關(guān)于數(shù)組訪問(wèn)越界,類似于下面的這個(gè)程序: ?
? 以下三條輸出語(yǔ)句分別輸出什么?[C易] ?
? char ? str1[] ? ? ? ? ? ? ? = ? "abc"; ?
? char ? str2[] ? ? ? ? ? ? ? = ? "abc"; ?
? const ? char ? str3[] ? = ? "abc"; ? ?
? const ? char ? str4[] ? = ? "abc"; ? ?
? const ? char* ? str5 ? ? = ? "abc"; ?
? const ? char* ? str6 ? ? = ? "abc"; ?
? cout ? << ? boolalpha ? << ? ( ? str1==str2 ? ) ? << ? endl; ? // ? 輸出什么? ?
? cout ? << ? boolalpha ? << ? ( ? str3==str4 ? ) ? << ? endl; ? // ? 輸出什么? ?
? cout ? << ? boolalpha ? << ? ( ? str5==str6 ? ) ? << ? endl; ? // ? 輸出什么? ?
? ============================= ?
? 關(guān)于: ?
? 很多bug不進(jìn)行匯編跟蹤是看不出來(lái)的,比如有的bug在Debug版下沒(méi)有問(wèn)題,在release版下有問(wèn)題,怎么辦?手工下斷點(diǎn),進(jìn)行匯編調(diào)試,找出問(wèn)題。還有一種情況,release程序正常運(yùn)行,但在某個(gè)時(shí)刻發(fā)生異常崩潰,你怎么辦?看drwtsn32的故障轉(zhuǎn)儲(chǔ)文件,也要分析匯編代碼。 ?
? 對(duì)于軟件調(diào)試,如果不考慮軟件邏輯/算法的問(wèn)題,僅就軟件本來(lái)說(shuō)可以按照下面的步驟進(jìn)行的: ?
? 代碼調(diào)試(編譯能否通過(guò))-->內(nèi)存調(diào)試(數(shù)據(jù)處理是否正確,堆棧是否正常)--->寄存器調(diào)試(寄存器內(nèi)容是否正確)。 ?
? =========================================== ?
? 這個(gè)觀點(diǎn)我是很同意的,但是現(xiàn)在有多少人能熟練使用匯編呢?我也不能。如果在Release模式下出現(xiàn)問(wèn)題,可以使用MAP文件定位錯(cuò)誤的位置。呵呵,參考: ?
? http://www.vckbase.com/document/viewdoc/?id=908 ?
? http://www.vckbase.com/document/viewdoc/?id=1473Top
61 樓vcleaner(我沒(méi)當(dāng)大哥很久了.......)回復(fù)于 2005-06-14 09:24:11 得分 0
就象我帖子中所說(shuō)的“有的時(shí)候多在網(wǎng)站上看看別人的經(jīng)歷也能有所收獲。”建議大家到下面的URL去看看,仔細(xì)體會(huì)一下,肯定能學(xué)到很多東西: ?
? http://www.vckbase.com/document/listdoc.asp?mclsid=23&sclsid=2303Top
62 樓icecools(浮生若夢(mèng))回復(fù)于 2005-06-14 09:44:44 得分 2
樓主有沒(méi)關(guān)于WinDbg的資料啊?Top
63 樓vcleaner(我沒(méi)當(dāng)大哥很久了.......)回復(fù)于 2005-06-14 10:17:16 得分 0
WinDbg的幫助文件就很好了,呵呵,有時(shí)間仔細(xì)的看看! ?
? 你可以在MS的網(wǎng)站上下載WinDbg和相關(guān)的OS的調(diào)試符號(hào)。Top
64 樓vcleaner(我沒(méi)當(dāng)大哥很久了.......)回復(fù)于 2005-06-14 10:20:17 得分 0
也可以直接從vckbase下載: ?
? http://www.vckbase.com/tools/debug/dbg_x86_6.2.13.1.exeTop
65 樓vcleaner(我沒(méi)當(dāng)大哥很久了.......)回復(fù)于 2005-06-14 10:42:24 得分 0
Windows ? 2000的調(diào)試符號(hào)和Windbg: ?
? http://www.microsoft.com/Windows2000/downloads/tools/symbols/download.aspTop
66 樓Tray(Vaulting horse)回復(fù)于 2005-06-16 15:36:04 得分 0
markTop
67 樓Willpro(WillPro)回復(fù)于 2005-06-16 18:26:25 得分 0
markTop
68 樓jaunty_lau(夜上濃妝)回復(fù)于 2005-06-22 23:42:19 得分 0
樓主說(shuō)語(yǔ)言的風(fēng)格真讓我感覺(jué)熟悉 ?
? 哈哈 ?
? 認(rèn)識(shí)一下高人
轉(zhuǎn)載地址: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1623220
????????????給我老師的人工智能教程打call!http://blog.csdn.net/jiangjunshow
總結(jié)
以上是生活随笔為你收集整理的程序员调试能力和相关书籍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 父母在,不远游
- 下一篇: 大学生图书借阅分析【上篇】