版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
檔,歡迎下載VC方法一些說就是我們的程序當(dāng)?shù)袅耍?dāng)Windows給我們彈出一個(gè)異常對(duì)話框時(shí),我們應(yīng)如何根據(jù)本文介紹了一種能夠方便地根據(jù)異常信息定位VC開發(fā)的程序BUG的方法,支持在NT、XP2、關(guān)鍵過程、根本原因分析許多異常定位的實(shí)現(xiàn),基本原理都是一樣,調(diào)用APISetUnhandledExceptionFilter設(shè)然后配合map文件來進(jìn)行異常定位,觀察到底是哪里的代碼出了問題。對(duì)于上面的分析方法存在兩個(gè)問題,一是map文件的生成問題,很長(zhǎng)時(shí)間以來,我們項(xiàng)目組內(nèi)一直不知道應(yīng)如何讓據(jù)異常出現(xiàn)的指令位置定位到代碼的具體行,在沒有堆棧信息的時(shí)候也能夠做一個(gè)基本的定位;二是分析的麻煩,要對(duì)著map文件去很費(fèi)勁的找。針對(duì)以上現(xiàn)狀,一方面要解決map文件生成的問題,另一方面就是如何根據(jù)異常信息來3、結(jié)論、解決方案及效果map文件的生成在工程設(shè)置對(duì)話框中Link頁(yè),General分類中,選中Generatemapfile選項(xiàng),如下圖所在最下方的ProjectOptions中增加編譯選項(xiàng):/MAPINFO:EXPORTS/MAPINFO:LINES下拉列表選中為ProgramDatabase,如下圖所示:經(jīng)過以上設(shè)置后,生成的map文件中就能夠包含行信息了,類似下面的情況:使用XCPTHLR.dll該動(dòng)態(tài)庫(kù)完成的工作就是記錄異常信息,并根據(jù)編譯過程中生成的pdb文件進(jìn)行分析,果你在使用的過程中覺得不需要那么多信息,可以修改ExceptHandle.cpp中的CExceptionLogger::GenerateCrashLog函數(shù),在該文件頭部的注釋中詳細(xì)描述了工程設(shè)置的方法、記錄信息的內(nèi)容以及如何使用,這里就我測(cè)試的情況給大家大概描述一下。在編譯的過程中需要使用下面兩個(gè)東東,安裝了最新的SDK后才有(花了好長(zhǎng)的時(shí)間才運(yùn)行的時(shí)候需要調(diào)用SymGetTypeInfo這個(gè)API,但NT、2000目前的DbgHelp.dll不支持,XP和Win2003才有,所以只好從XP上找了一個(gè)過來用,運(yùn)行的時(shí)候需要把這個(gè)動(dòng)態(tài)苦放在我們工程App類的InitInstance中調(diào)用LoadLibrary(“XCPTHLR.dll”);按照注釋中的說明設(shè)置工程選項(xiàng):如下圖所示:在最下方的ProjectOptions編輯框中增加編譯開關(guān)“/OPT:REF”;OK,在你的程序中故意寫一些錯(cuò)誤的代碼,例如:char*p=NULL;*p=0;運(yùn)行你的程序,會(huì)發(fā)現(xiàn)生成了類似下面的文件:(我這里屏蔽了本進(jìn)程其它模塊的信息)異常的地址,第7行,如下:ExceptionAddressDetails:0x00401477[.text]:0x00000477D:\xxx\Release\xxx.exe其中0x000000477(0x00401447–0x00401000)就是異常代碼所在的位置,根據(jù)此信息我們可以結(jié)合map文件定位到具體出問題的那一行代碼;第二,調(diào)用棧(CallStack),在文件的最后,CallStack:0x00401477[.text]:0x00000477D:\xxx\Release\xxx.exeCTestThd::Test+13D:\xxx\TestThd.cppline36VariablesLocal:Local:this,RegisterRelative,Address:015EFF00,NoType0x00401458[.text]:0x00000458D:\xxx\Release\xxx.exeCTestThd::InitInstance+FD:\xxx\TestThd.cppline30VariablesLocal:this,RegisterRelative,Address:015EFF10,NoType可以看到,這里直接給出了出錯(cuò)的文件行信息;第三,寄存器信息,在CallStack上方,如下:Registers:EAXEBXECXEDX00000000000000C4003454B8FFFFFFFF檔,歡迎下載ESIEDI003454B80012FE74CS:EIP0000001B:00401477SS:ESP00000023:015EFF00EBP00000023DS00000023ES00000023FS00000038GS00000000Flags00010206由此可以看出許多程序執(zhí)行的內(nèi)容,如EAX為上一個(gè)動(dòng)作的執(zhí)行返回結(jié)果等。另外,這里面還會(huì)記錄當(dāng)前所有線程的信息,能夠通過這
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版保健食品電商平臺(tái)數(shù)據(jù)分析與用戶畫像合同2篇
- 二零二五版電影后期特效制作贊助合同3篇
- 二零二五年度建筑節(jié)能玻璃檢測(cè)與綠色建筑認(rèn)證合同3篇
- 二零二五年技術(shù)服務(wù)合同服務(wù)內(nèi)容和技術(shù)要求2篇
- 二零二五版存量房買賣合同家庭定制版2篇
- 二零二五版智能公廁建設(shè)與運(yùn)營(yíng)管理合同3篇
- 二零二五版體育用品促銷員賽事贊助合同3篇
- 二零二五版鐘點(diǎn)工家政服務(wù)合同-含家政員行為規(guī)范3篇
- 二零二五版國(guó)際汽車運(yùn)輸與品牌合作推廣合同3篇
- 二零二五版能源節(jié)約型產(chǎn)品采購(gòu)合同規(guī)范范本2篇
- 讓學(xué)生看見你的愛
- 銷售禮盒營(yíng)銷方案
- 領(lǐng)導(dǎo)溝通的藝術(shù)
- 發(fā)生用藥錯(cuò)誤應(yīng)急預(yù)案
- 南潯至臨安公路(南潯至練市段)公路工程環(huán)境影響報(bào)告
- 綠色貸款培訓(xùn)課件
- 大學(xué)生預(yù)征對(duì)象登記表(樣表)
- 主管部門審核意見三篇
- 初中數(shù)學(xué)校本教材(完整版)
- 父母教育方式對(duì)幼兒社會(huì)性發(fā)展影響的研究
- 新課標(biāo)人教版數(shù)學(xué)三年級(jí)上冊(cè)第八單元《分?jǐn)?shù)的初步認(rèn)識(shí)》教材解讀
評(píng)論
0/150
提交評(píng)論