天天看點

dump檔案的調試

這段時間突然發現,要一下做一個金剛不壞之身的程式是不太可能滴,至于對我來說吧。

這個程式也要經過千錘百煉才能夠練就一個強大的自信心。

我現在做系統就不考慮一下把程式做的足夠強壯了,因為我也做不到

dump檔案的調試

,現在做系統時,總考慮的一個問題:

當系統異常的時候怎麼去處理?

我不怕系統程式出現異常,甚至直接Over,隻要能在異常時處理異常後繼續運作,在崩潰重新開機後能夠繼續把沒

幹的活給幹了,那麼這個在我能夠承受的範圍内,也在大多數客戶的承受範圍内,因為這樣就是我們所說的将

損失減小到最低,其實是不是最低隻有自己能夠知道。

當然了,我更希望能夠做出一個健壯無比的牛逼程式,是以我想知道程式是在什麼情況下崩潰的,可是有些問題

你懂的,老在客戶機器上或者生産環境下出現,卻在自己的機器上和測試環境就他媽的不出現,遇見這種情況我是

跳樓或者殺人的心情都有了,偶爾我也犯過情緒,想提出辭職申請,換個行業去,告别這苦逼的程式員生涯,

可總不知道是什麼力量支援着我,讓我堅強依舊滴做着程式員,過着狗日的日子。

後來,不經意間,一位同僚給我說了一個種在系統中異常或者崩潰的時候,來生成dump檔案,然後用調試器來調試。

這樣就可以在生産環境中的dmp檔案,拷貝到自己的開發機器上,調試就可以找到錯誤的位置,配合程式調試符号pdb檔案,

直接可以定位到源代碼中位置,真是太他媽的神奇了,雖然Release版本下的很多變量的值是不對滴,但并不影響我這個

這麼有執着心的coder來找bug。

同僚給了我他寫的示例,往空指針拷貝資料,在非調試下運作後,果然的崩了,果斷滴生成了一個擴充名為dmp的檔案,

然後他用vs2010打開那個dmp檔案,vs2010很果斷滴定位到了那個往空指針拷貝資料那裡。

看他那娴熟的操作,頓時感覺到了他的強大和微軟的牛逼。

後來我就學他,在程式中加入程式異常時産生dump檔案的功能,待系統釋出後,在一次不經意間一個程式挂掉了。

在客戶的謾罵中,我面帶笑容說:這個問題很好解決。我滿懷信心滴從伺服器上拷貝了程式崩潰産生dump檔案,

然後學着那個同僚用vs2010打開,我了個去,咋沒有定位到源代碼中内,隻定位到了可執行檔案的一個位址,這讓哥

情何以堪呐!

dump檔案的調試

還好,我對pdb了解還比較熟悉,想來應該是符号檔案的問題,于是就開始摸索的,不經意見的在

堆棧處右擊了下,發現菜單裡竟然有“加載符号”,而且還有“符号路徑”,我想這大概就是讓我來選擇

對應的pdb檔案吧,頓時感覺曙光就在前面。

dump檔案的調試

點選了“符号路徑”後如下圖:

dump檔案的調試

才發現了,它并不是來選擇符号檔案,而是選擇對應的可執行程式的路徑,選擇了後果斷滴定位到了源代碼的位置,

才發現一個很簡單很美麗的bug,修改後,在測試後重制釋出,系統的健壯性又提高了一個台階。

回頭想了想,我同僚給我示範的時候,他程式運作的目錄和就是他直接用vs2010生成的目錄,是以此種情況下

用vs2010打開dmp檔案即可定位到源代碼檔案。而釋出後的程式,一般情況下你根本不知道别人放在什麼地方去執行的,

是以調試時還并必須選相同版本的可執行檔案,然後pdb檔案才會好好工作,要不沒可執行檔案,咋個調試嘛。

哎,這同僚,居然還留了一手,坑爹啊。

不過還是要感謝他滴,我又掌握了一些東西,又增強了我這個苦逼程式員寫好程式的信心。

在寫這個之前看了相關文章,感覺比較好的推薦一哈:

http://www.cppblog.com/woaidongmao/archive/2011/05/10/146086.html