Dump調(diào)試

打開Dump文件調(diào)試

  • VS方式:
    用VS打開dump


    VS調(diào)試

    a 根據(jù)截圖中“1”的位置確定程序安裝路徑谈飒,將同版本的程序安裝到同樣的目錄下
    b 根據(jù)截圖中“2”的位置,設(shè)置符號(hào)文件的路徑(可將符號(hào)文件拷貝到安裝目錄下,確保符號(hào)文件與安裝包是同一版本)
    c 點(diǎn)擊截圖中“3”的位置,進(jìn)行分析

  • windbg方式:
    a 配置好symbol file path(即.pdb文件所在目錄)
    b 用windbg打開dump文件
    c 在符號(hào)文件正確的情況下,在windbg中輸入:!analyze -v后就能查看到崩潰的代碼行秫筏。

查看模塊信息
有時(shí)我們拿到dump文件后,卻無(wú)法知道該dump編譯的版本挎挖,進(jìn)而無(wú)法知道該dump對(duì)應(yīng)的pdb文件这敬,這時(shí)可
以有兩個(gè)方式獲取模塊的版本信息:

  • windbg中,使用命令!lmi app.exe!lmi module.dll[1]來(lái)得到模塊的相關(guān)信息肋乍,其中有一項(xiàng)就是模塊編譯時(shí)間鹅颊,如:
    模塊編譯時(shí)間
  • VS中,將dump文件拖到VS中墓造,
    1 點(diǎn)擊“使用僅限本機(jī)進(jìn)行調(diào)試”
    VS調(diào)試

    2 加載完畢后堪伍,選中模塊
    查看模塊

    3 可查看各模塊的信息
    模塊信息

    強(qiáng)制加載
    有時(shí)我們會(huì)遇到找不到dump文件對(duì)應(yīng)的pdb文件,但有相近的pdb的情況觅闽,這兩個(gè)版本之間代碼差異不大帝雇,在這種情況下,我們可以強(qiáng)制加載pdb來(lái)定位問(wèn)題:
  • 強(qiáng)制加載并分析
    先輸入命令:.reload /i module.dll[2]蛉拙,再輸入:!analyze -v
  • 如果上述方式還不行尸闸,則可以增加“激活詳細(xì)符號(hào)加載”的步驟
    先輸入命令:.reload /i module.dll,再輸入:!sym noisy;.reload /i module.dll module!*test*,最后輸入:!analyze -v
    查看堆棧
    查看堆棧主要用于以下兩種情況:
    1 有時(shí)我們分析時(shí)吮廉,會(huì)遇到無(wú)任何堆棧信息情況苞尝,打印出類似如下
    字段:APPLICATION_FAULT_WRONG_SYMBOLS_ZEROED_STACK_STACKIMMUNE
    2 強(qiáng)制加載后,還是只能打印出模塊信息宦芦,而無(wú)詳細(xì)的堆棧信息宙址。
    此時(shí)可以輸入命令:.ecxr 切換到異常線程,然后再輸入kp调卑,kb等命令打印出詳細(xì)的堆棧信息

查看當(dāng)前線程狀態(tài)
命令:~*kv
調(diào)試32位程序在64位機(jī)器下生成64位dump
命令:.load wow64exts
任務(wù)管理器創(chuàng)建dump
在64位系統(tǒng)下使用任務(wù)管理器生成dump時(shí)抡砂,默認(rèn)打開的任務(wù)管理器是64位的,創(chuàng)建dump也是64位的恬涧,這樣的dump不容易調(diào)試注益;其實(shí),系統(tǒng)還提供了一個(gè)32位的任務(wù)管理器:C:\Windows\SysWOW64\taskmgr.exe溯捆,用它生成的dump是32位的丑搔,這樣就可以跟代碼生成的dump一樣去調(diào)試了。[3]
代碼行錯(cuò)亂
在我們?cè)诟鶕?jù)堆棧查找代碼行時(shí)现使,堆棧指出的位置要不就是崩潰的那一行低匙,要不就在崩潰的下一行,但有時(shí)碳锈,我們發(fā)現(xiàn)代碼行對(duì)應(yīng)不上任何可疑之處,一般有兩種情況:

  • 本地代碼有過(guò)更新已經(jīng)不是崩潰時(shí)的代碼
  • 強(qiáng)制加載的符號(hào)文件與崩潰版本的代碼差異欺抗,剛好是在崩潰文件處售碳。

解決方案:將代碼行有出入的文件revert到崩潰版本,崩潰版本的打包時(shí)間可以根據(jù)上面的“查看模塊信息”章節(jié)查看绞呈。
顯示最近的一條異常記錄
命令:.exr -1贸人,由于異常是事件的一種,所以使用.exr -1命令得到的異常佃声,可能和使用.lastevent命令獲取的事件(其實(shí)是異常)艺智,是同一個(gè)。但二者顯示的信息各有側(cè)重點(diǎn)圾亏。
查看內(nèi)存
如果程序本身有內(nèi)存泄露十拣,在不斷的測(cè)試過(guò)程中,可能出現(xiàn)內(nèi)存不足的情況志鹃,打印出的堆棧信息可能是紊亂的夭问,此時(shí)可以考慮查看一下內(nèi)存,看是否還有可分配的內(nèi)存:!address -summary曹铃,打印出的信息如下:

內(nèi)存使用情況

如上圖中缰趋,剩余內(nèi)存只有46M,明顯已經(jīng)內(nèi)存不足。

VS得出的堆棧比Windbg少
有時(shí)我們會(huì)交替的使用VS和Windbg來(lái)分析Dump秘血,如果發(fā)現(xiàn)用VS得出的堆棧信息比Windbg少味抖,可以把缺少的那個(gè)代碼文件拉到VS中,找到有顯示地址的函數(shù)的頭部灰粮。

函數(shù)地址

將函數(shù)開頭的地址加上仔涩,Windbg中顯示的地址偏移,跳轉(zhuǎn)到崩潰處谋竖。


地址偏移

找到崩潰處:55D0E910+1e15=55D10725红柱,在第一次call器联,即調(diào)用getDrawingMgr時(shí)崩潰阻肩,調(diào)用地址為67酒朵,懷疑堆溢出犹撒,把該函數(shù)地址壓了焕梅。

偏移后地址

【參考資料】
DUMP文件分析1:DUMP文件簡(jiǎn)介
Windbg調(diào)試命令詳解


  1. 命令中所有的app或module需要根據(jù)實(shí)際情況替換成真實(shí)的模塊名稱 ?

  2. 標(biāo)注處事強(qiáng)制加載某個(gè)模塊缀拭,還可以用“.reload /i”強(qiáng)制加載所有模塊 ?

  3. debug 64bit dump of a 32bit process in windows 7 64bit ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谆吴,一起剝皮案震驚了整個(gè)濱河市煎谍,隨后出現(xiàn)的幾起案子些侍,更是在濱河造成了極大的恐慌隶症,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岗宣,死亡現(xiàn)場(chǎng)離奇詭異蚂会,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)耗式,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門胁住,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人刊咳,你說(shuō)我怎么就攤上這事彪见。” “怎么了娱挨?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵余指,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我跷坝,道長(zhǎng)酵镜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任探孝,我火速辦了婚禮笋婿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘顿颅。我一直安慰自己缸濒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著庇配,像睡著了一般斩跌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捞慌,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天耀鸦,我揣著相機(jī)與錄音,去河邊找鬼啸澡。 笑死袖订,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗅虏。 我是一名探鬼主播洛姑,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼皮服!你這毒婦竟也來(lái)了楞艾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤龄广,失蹤者是張志新(化名)和其女友劉穎硫眯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體择同,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡两入,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了敲才。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谆刨。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖归斤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刁岸,我是刑警寧澤脏里,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站虹曙,受9級(jí)特大地震影響迫横,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酝碳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一矾踱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疏哗,春花似錦呛讲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吗氏。三九已至,卻和暖如春雷逆,著一層夾襖步出監(jiān)牢的瞬間弦讽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工膀哲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留往产,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓某宪,卻偏偏與公主長(zhǎng)得像仿村,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缩抡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容