版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
檔,歡迎下載VC方法一些說就是我們的程序當(dāng)?shù)袅?,?dāng)Windows給我們彈出一個異常對話框時,我們應(yīng)如何根據(jù)本文介紹了一種能夠方便地根據(jù)異常信息定位VC開發(fā)的程序BUG的方法,支持在NT、XP2、關(guān)鍵過程、根本原因分析許多異常定位的實現(xiàn),基本原理都是一樣,調(diào)用APISetUnhandledExceptionFilter設(shè)然后配合map文件來進行異常定位,觀察到底是哪里的代碼出了問題。對于上面的分析方法存在兩個問題,一是map文件的生成問題,很長時間以來,我們項目組內(nèi)一直不知道應(yīng)如何讓據(jù)異常出現(xiàn)的指令位置定位到代碼的具體行,在沒有堆棧信息的時候也能夠做一個基本的定位;二是分析的麻煩,要對著map文件去很費勁的找。針對以上現(xiàn)狀,一方面要解決map文件生成的問題,另一方面就是如何根據(jù)異常信息來3、結(jié)論、解決方案及效果map文件的生成在工程設(shè)置對話框中Link頁,General分類中,選中Generatemapfile選項,如下圖所在最下方的ProjectOptions中增加編譯選項:/MAPINFO:EXPORTS/MAPINFO:LINES下拉列表選中為ProgramDatabase,如下圖所示:經(jīng)過以上設(shè)置后,生成的map文件中就能夠包含行信息了,類似下面的情況:使用XCPTHLR.dll該動態(tài)庫完成的工作就是記錄異常信息,并根據(jù)編譯過程中生成的pdb文件進行分析,果你在使用的過程中覺得不需要那么多信息,可以修改ExceptHandle.cpp中的CExceptionLogger::GenerateCrashLog函數(shù),在該文件頭部的注釋中詳細描述了工程設(shè)置的方法、記錄信息的內(nèi)容以及如何使用,這里就我測試的情況給大家大概描述一下。在編譯的過程中需要使用下面兩個東東,安裝了最新的SDK后才有(花了好長的時間才運行的時候需要調(diào)用SymGetTypeInfo這個API,但NT、2000目前的DbgHelp.dll不支持,XP和Win2003才有,所以只好從XP上找了一個過來用,運行的時候需要把這個動態(tài)苦放在我們工程App類的InitInstance中調(diào)用LoadLibrary(“XCPTHLR.dll”);按照注釋中的說明設(shè)置工程選項:如下圖所示:在最下方的ProjectOptions編輯框中增加編譯開關(guān)“/OPT:REF”;OK,在你的程序中故意寫一些錯誤的代碼,例如:char*p=NULL;*p=0;運行你的程序,會發(fā)現(xià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可以看到,這里直接給出了出錯的文件行信息;第三,寄存器信息,在CallStack上方,如下:Registers:EAXEBXECXEDX00000000000000C4003454B8FFFFFFFF檔,歡迎下載ESIEDI003454B80012FE74CS:EIP0000001B:00401477SS:ESP00000023:015EFF00EBP00000023DS00000023ES00000023FS00000038GS00000000Flags00010206由此可以看出許多程序執(zhí)行的內(nèi)容,如EAX為上一個動作的執(zhí)行返回結(jié)果等。另外,這里面還會記錄當(dāng)前所有線程的信息,能夠通過這
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版門樓智能鎖具采購與安裝協(xié)議4篇
- 二零二五年度面粉行業(yè)市場調(diào)研與分析合同7篇
- 2025年度個人住房抵押貸款利率調(diào)整合同范本4篇
- 建筑施工工人中介合同(2篇)
- 畢業(yè)論文答辯模板
- 項目組人員培訓(xùn)計劃三篇
- 二零二五年車位購置合同標(biāo)準(zhǔn)文本9篇
- 鍋爐課程設(shè)計引言
- 2024年中級電工職業(yè)鑒定考試題庫-上(單選題)
- 2025年度新能源設(shè)備代理商加盟協(xié)議合同4篇
- 專升本00974統(tǒng)計學(xué)原理歷年試題題庫(考試必備)
- 德魯克《創(chuàng)新與企業(yè)家精神》 課件
- 陜西省漢中市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 消防維保方案 (詳細完整版)
- FIDIC銀皮書(中英文對照)
- (中職)商品管理教學(xué)ppt課件(完整版)
- 安全加固方案模板格式
- NCNDA-IMFPA中英文對照電子版本
- 雙管板換熱器制作工藝
- 南極磷蝦油100問專業(yè)版
- MID-K俄羅斯多層管柱電磁探傷測井
評論
0/150
提交評論