![編譯器內(nèi)存問題調(diào)試技術(shù)講座_第1頁](http://file4.renrendoc.com/view10/M01/01/13/wKhkGWWeJriAeC6iAAKfPUiwaok469.jpg)
![編譯器內(nèi)存問題調(diào)試技術(shù)講座_第2頁](http://file4.renrendoc.com/view10/M01/01/13/wKhkGWWeJriAeC6iAAKfPUiwaok4692.jpg)
![編譯器內(nèi)存問題調(diào)試技術(shù)講座_第3頁](http://file4.renrendoc.com/view10/M01/01/13/wKhkGWWeJriAeC6iAAKfPUiwaok4693.jpg)
![編譯器內(nèi)存問題調(diào)試技術(shù)講座_第4頁](http://file4.renrendoc.com/view10/M01/01/13/wKhkGWWeJriAeC6iAAKfPUiwaok4694.jpg)
![編譯器內(nèi)存問題調(diào)試技術(shù)講座_第5頁](http://file4.renrendoc.com/view10/M01/01/13/wKhkGWWeJriAeC6iAAKfPUiwaok4695.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
軟件調(diào)試經(jīng)驗(yàn)交流zhongguoguojijiankongyanjiuyuzhouzhongxin編譯器選項(xiàng)、常用工具與調(diào)試器介紹內(nèi)存問題的一些調(diào)試方法事后調(diào)試的一些經(jīng)驗(yàn)個(gè)人調(diào)試經(jīng)驗(yàn)與建議編譯器選項(xiàng)目前監(jiān)控系統(tǒng)采用中的編譯器
vc6、intel-c++9.0solaris-CCCXX6.1……以solaris和windows為代表編譯選項(xiàng)的不同會(huì)給調(diào)試帶來不同的結(jié)果,需要細(xì)致選擇Solaris系統(tǒng)與編譯器相關(guān)選項(xiàng)Unix系統(tǒng)的可執(zhí)行文件為ELF文件格式,符號存在與生成的文件中,默認(rèn)情況下,即使release程序,依然會(huì)在程序中保留符號表編譯器中與調(diào)試相關(guān)的選項(xiàng) –g用于與調(diào)試一起使用的編譯。 –g0編譯以便進(jìn)行調(diào)試,但不禁用內(nèi)聯(lián)。 –s從可執(zhí)行文件中去掉符號表。 -xcheck
對棧溢出增加一個(gè)運(yùn)行時(shí)檢查。Solaris常用調(diào)試工具\(yùn)命令dbxstudio自帶調(diào)試器dtrace
操作系統(tǒng)自帶探測器pstack
察看程序運(yùn)行棧prstatgcore
mdb
通用模塊調(diào)試器gdbdbx
常用命令debug/attach
debugprogname
pidattachpiddetach/killup/down/frameframe–hprintwhereiswhatisthreads/threadSolaris調(diào)試符號-g生成調(diào)試符號,相關(guān)動(dòng)態(tài)庫也必須如此生成才能看到源代碼release模式下僅提供棧回溯信息察看debug模式可以定位到代碼行,查看函數(shù)參數(shù)可使用strip命令剝離調(diào)試符號windows系統(tǒng)與編譯器選項(xiàng)操作系統(tǒng)checkedbuild與freebuild
推薦多多察看公司訂閱的MSDN現(xiàn)階段windows采用符號文件與目標(biāo)文件分離的方式,PDB格式Windows編譯器選項(xiàng)/GZ運(yùn)行時(shí)安全檢查與/Ox沖突/RTCvs7以上有效,運(yùn)行時(shí)安全檢查/Zi
生成完整的調(diào)試信息與/Ox沖突/GS緩沖區(qū)安全檢查/Od
禁用優(yōu)化信息windows常用調(diào)試工具微軟擁有兩個(gè)調(diào)試器開發(fā)小組windbg工具包,支持內(nèi)核級別調(diào)試,建議在環(huán)境不友好或者難于解決某個(gè)問題時(shí)使用,也適用于多線程調(diào)試vsdebuggertool
(codeview)隨IDE發(fā)布,更易上手,建議日常工作使用Windbg-集成的強(qiáng)大工具包gflags
設(shè)置各類調(diào)試標(biāo)志ntsd.exe/cdb.exe/kd.exe
命令行調(diào)試器adplus.vbs
導(dǎo)出dump文件腳本windbg.exe
帶界面的調(diào)試器windbg常用命令k顯示棧~顯示線程~*~.~#*全部.當(dāng)前#故障d/da/db/ddx查找符號r寄存器.cls
g.reload.lasteventgflags—設(shè)置系統(tǒng)調(diào)試選項(xiàng)SystemRegistry對系統(tǒng)設(shè)置,所用進(jìn)程生效KernelFlags對設(shè)置后所有新運(yùn)行進(jìn)程生效,重起后失效ImageFiles對單個(gè)模塊生效gflagsWindows系統(tǒng)調(diào)試符號的獲取設(shè)置環(huán)境變量Set_NT_SYMBOL_PATH=symsrv*c:\localsymbols*http:///download/symbols調(diào)試包中的SymChk.exe
實(shí)用工具調(diào)試符號文件(PDB)具備時(shí)標(biāo)信息,嚴(yán)格匹配對于操作系統(tǒng)符號推薦使用SRV語法,動(dòng)態(tài)獲取,如需出差可下載離線安裝包http:///whdc/DevTools/Debugging/symbolpkg.mspx常見內(nèi)存問題的分類問題可能的原因錯(cuò)誤釋放嘗試釋放尚未分配的內(nèi)存重復(fù)釋放嘗試釋放已釋放過的堆塊未分配的內(nèi)存讀溢出堆塊邊界或訪問已被釋放的堆塊的指針讀未初始化內(nèi)存從未初始化的內(nèi)存中進(jìn)行讀取寫入到只讀內(nèi)存向文本地址寫入、向只讀區(qū)、只讀的頁寫入寫未分配內(nèi)存溢出堆塊邊界或訪問已被釋放的堆塊的迷失指針越界寫/讀錯(cuò)誤下標(biāo)或偏移,導(dǎo)致寫入/讀取非預(yù)定、但區(qū)域合法Windows的堆管理ApplicationCRT堆(進(jìn)程私用)Win32運(yùn)行時(shí)內(nèi)存管理器操作系統(tǒng)內(nèi)存管理器new/
mallocVirtualAllocHeapAllocHeapCreate操作系統(tǒng)按頁分配內(nèi)存,最小為4kbWin32堆管理器分配內(nèi)存考慮到效率與字節(jié)問題分配內(nèi)存的最小單位是4字節(jié)windows悲劇的由來release/debug、程序跑飛了……操作系統(tǒng)默認(rèn)不對應(yīng)用程序私用堆進(jìn)行檢查對于x86,操作系統(tǒng)以4KB為單位進(jìn)行分配,如果頁內(nèi)出錯(cuò),可能并不導(dǎo)致程序立刻崩潰。操作系統(tǒng)對于連續(xù)頁邊界也并不默認(rèn)進(jìn)行保護(hù),如果你的程序非法訪問了下一頁的內(nèi)容,湊巧,這一頁確實(shí)存在,也很有可能不會(huì)立刻出錯(cuò)。設(shè)置系統(tǒng)調(diào)試標(biāo)志PageHeap
ApplicationVerifier
gflags
內(nèi)存堆調(diào)試的常用調(diào)試標(biāo)志調(diào)試機(jī)制描述典型應(yīng)用?;厮軺ST記錄堆分配函數(shù)的調(diào)用過程檢查內(nèi)存泄漏堆尾檢查htc在堆尾設(shè)置保護(hù)字段檢查堆緩沖區(qū)溢出釋放檢查hfc釋放內(nèi)存時(shí)檢查多次釋放同一區(qū)域參數(shù)檢查hpc檢查調(diào)用堆函數(shù)時(shí)的參數(shù)發(fā)現(xiàn)錯(cuò)誤參數(shù)頁堆PH分配柵欄頁,強(qiáng)制在邊界分配內(nèi)存堆溢出solaris
使用運(yùn)行期檢查dbx
使用check–access相對來說,unix的內(nèi)存保護(hù)機(jī)制比windows要好的多,基本上可以在第一現(xiàn)場崩潰Windowsstackunwinding問題windows的棧展開依賴于調(diào)試符定位,與編譯時(shí)優(yōu)化的棧指針省略也有關(guān)系。重新編譯程序,匹配調(diào)試符號關(guān)閉程序優(yōu)化手工構(gòu)造程序棧參見/en-us/library/cc267826.aspx棧問題困難所在操作系統(tǒng)默認(rèn)不對程序棧進(jìn)行檢查如果開啟FPO,會(huì)導(dǎo)致程序真正崩潰時(shí)的棧信息錯(cuò)誤,無法獲取有效信息棧破壞問題的調(diào)試經(jīng)驗(yàn)并無特別好的調(diào)試方法常見原因是棧上創(chuàng)建的數(shù)組或者字符串越界,開啟緩沖區(qū)檢查,有助于幫助調(diào)試該問題大致定位后仔細(xì)跟蹤相對而言,unix系統(tǒng)的情況好一些,一般可以及時(shí)發(fā)現(xiàn)棧破壞而主動(dòng)dump內(nèi)存泄漏調(diào)試的基本方法無論什么方法,大都是映射到最底層的內(nèi)存分配/釋放調(diào)用進(jìn)行配對,同時(shí)記錄分配時(shí)的調(diào)用棧,確定泄漏地址。工具和方法都不是萬能的,并且生成報(bào)告相當(dāng)繁瑣,需要仔細(xì)查找和耐心分析。對于引用計(jì)數(shù)類誤報(bào)率很高(QString)內(nèi)存泄漏初始分析使用檢測工具定義回避策略windows任務(wù)管理器procexpprstatesolaris進(jìn)程管理器LeakDiagAppVerdbx…修改代碼自動(dòng)垃圾回收資源泄漏--windows調(diào)試器調(diào)試使用專門的微軟檢測工具靜態(tài)代碼檢查工具–漏報(bào)率較高Purify運(yùn)行時(shí)檢查–誤報(bào)率很高設(shè)置正確的調(diào)試標(biāo)志很重要內(nèi)存泄漏-WindowsLeakDiagUMDHLeakDiag的使用選擇一個(gè)進(jìn)程選擇檢測的分配器也可生成dumpUMDH的使用gflags
設(shè)置進(jìn)程Createusermodestacktracedatabase安裝系統(tǒng)調(diào)試符號全部下載/在線下載set_NT_SYMBOL_PATH=srv*c:\websymbols*http:///download/symbolsumdh
-p:2230
-f:c:\Log1.txt
資源泄漏--solarisdbx
打開check–leaks使用libumem使用dtracelibgc
高效自動(dòng)分配/回收內(nèi)存資源泄漏--solarisdbx
1.
使用dbx啟動(dòng)被跟蹤的程序。$dbx
target2.用check-leaks打開內(nèi)存泄漏檢查開關(guān)。(dbx)check-leaks3.運(yùn)行程序直至結(jié)束。當(dāng)程序運(yùn)行結(jié)束時(shí),dbx會(huì)給出檢測報(bào)告資源泄漏-solarislibumem
設(shè)置環(huán)境變量,使程序預(yù)加載libumem
setenvUMEM_DEBUGdefault;setenvUMEM_LOGGINGtransaction;setenvLD_PRELOADlibumem.so.1; 啟動(dòng)后使用gcore生成dump文件
資源泄漏-solarislibumem
mdb
調(diào)試器打開core文件::umem_status
libumem的日志功能是否開啟::findleaks命令查看是否有內(nèi)存泄漏::umalog
查看內(nèi)存分配的時(shí)間,地址,堆棧::umem_verify
查看內(nèi)存是否被破壞資源泄漏-solarisDTrace
內(nèi)嵌在Solaris系統(tǒng)中的子系統(tǒng)。它帶有30000多個(gè)監(jiān)測點(diǎn)Probe),可以動(dòng)態(tài)的搜集操作系統(tǒng)和應(yīng)用程序的運(yùn)行的方式和狀態(tài)。/bigadmin/hubs/multilingual/simp_chinese/content/dtracehowto.jsp資源泄漏-solarislibgc—不是辦法的辦法solaris提供的自動(dòng)垃圾回收庫,當(dāng)問題實(shí)在無法解決時(shí),可使用。使用方法,鏈接的時(shí)候直接鏈接該庫。事后調(diào)試-轉(zhuǎn)儲(chǔ)與分析沒有良好的調(diào)試環(huán)境不能隨意改變或者試驗(yàn)觸發(fā)調(diào)試場景現(xiàn)場出差費(fèi)用高昂事后調(diào)試的一般步驟分析相關(guān)性,定位故障模塊與大致問題觸發(fā)故障抓取系統(tǒng)快照進(jìn)行業(yè)務(wù)分析軟件的崩潰未經(jīng)允許的情況下訪問一個(gè)內(nèi)存單元。硬件會(huì)感知這件事,并執(zhí)行對操作系統(tǒng)(OS)的跳轉(zhuǎn)Unix段錯(cuò)誤(segfault)Windows一般性保護(hù)錯(cuò)誤generalprotectionfault發(fā)生問題,在第一現(xiàn)場崩潰,總比不崩潰的好Unix—dump的生成limitcoredumpsize1000000Windows—獲取dump文件drwtsn32adplus設(shè)置合適的調(diào)試標(biāo)志位使用Adplus抓取dump設(shè)置合適的調(diào)試標(biāo)志位(gflags)設(shè)置adplus隨目標(biāo)程序啟動(dòng)
gflags
中將該進(jìn)程調(diào)試器設(shè)置為Debugger=c:\debug\dump.bat編輯獲取dump的腳本dump.bat
cscript.exe
c:\xx\adplus.vbs–crash–od:\filedump–quiet–sc%1
一些crash調(diào)試tipswindows使用release程序調(diào)試發(fā)布某個(gè)版本程序時(shí),保存一個(gè)checkedbuilded有效設(shè)置調(diào)試標(biāo)志現(xiàn)場調(diào)試危機(jī)與壓力搜集分析假設(shè)求證修復(fù)驗(yàn)證個(gè)人現(xiàn)場調(diào)試的一些經(jīng)驗(yàn)-動(dòng)手之前無論做什么,備份先!溝通從心開始,與客戶溝通,與工程人員溝通,了解情況,撫慰客戶受傷的心要了解問題,必先了解環(huán)境,操作系統(tǒng)日志、異常、商業(yè)數(shù)據(jù)庫日志、異常、監(jiān)控軟件相關(guān)模塊日志。合理使用工具,抓包軟件,性能監(jiān)視工具,調(diào)試工具個(gè)人現(xiàn)場調(diào)試的一些經(jīng)驗(yàn)經(jīng)驗(yàn)總結(jié)從源頭開始每一條河流必有源頭 數(shù)據(jù),一切問題一定從輸入開始最小啟動(dòng)/最小配置
替換與取代確定問題模塊調(diào)試符號與程序的匹配相當(dāng)關(guān)鍵個(gè)人現(xiàn)場調(diào)試的一些經(jīng)驗(yàn)-工具之外耐心與細(xì)心唯意志論與回避論均不可取不用工具萬萬不能,依賴工具切切不可對于軟件調(diào)試/開發(fā)的一些個(gè)人建議程序良好的可調(diào)試性,應(yīng)作為設(shè)計(jì)目標(biāo)之一。
最短距離/最小范圍/立刻終止/可追溯/可控制/可重復(fù)/可觀察/可辨識
增加代碼的動(dòng)態(tài)驗(yàn)證過程(Purify,intelprofile)編譯器的統(tǒng)一和規(guī)范與客戶溝通的標(biāo)準(zhǔn)流程?常見問題FAQ的整理對于軟件調(diào)試/開發(fā)的一些個(gè)人建議做個(gè)懶人
盡量不要顯式分配內(nèi)存(或使用智能指針)
例:cha
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 懷化2024年湖南中坡國家森林公園管理處選調(diào)2人筆試歷年參考題庫附帶答案詳解
- 2025年模切燙印兩用機(jī)項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國微調(diào)雙燈行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國安全控制芯片行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年塑料四輥壓延機(jī)項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國乳膠漆調(diào)色機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年人體工學(xué)型電腦臺(tái)項(xiàng)目可行性研究報(bào)告
- 2025至2030年鼓式制動(dòng)器項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年鋼板清洗劑項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年中國金屬自攻螺釘數(shù)據(jù)監(jiān)測研究報(bào)告
- 2023年上海市秋考語文真題試卷含答案(整理版)
- 2023年心理咨詢師之心理咨詢師基礎(chǔ)知識考試題庫附完整答案【有一套】
- 路緣石安裝一級安全交底
- 一級建造師繼續(xù)教育最全題庫及答案(新)
- LS/T 1226-2022糧庫智能通風(fēng)控制系統(tǒng)
- 直線加速器專項(xiàng)施工方案
- 聯(lián)苯二氯芐生產(chǎn)工藝及產(chǎn)排污分析
- 儲(chǔ)能設(shè)備項(xiàng)目采購供應(yīng)質(zhì)量管理方案
- 美國房地產(chǎn)市場特征、框架與周期演變
- 光伏發(fā)電工程施工組織設(shè)計(jì)施工工程光伏發(fā)電工程光伏發(fā)電施工組織設(shè)計(jì)
- 民政局離婚協(xié)議書模板(4篇)
評論
0/150
提交評論