青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Dump調(diào)用堆棧的原理以及異常信息的反饋

Dump 調(diào)用堆棧的原理以及異常信息的反饋

動(dòng)機(jī):

在游戲開發(fā)過(guò)程中,我們利用 QA 部門來(lái)做產(chǎn)品的質(zhì)量保證,盡可能將絕大部分錯(cuò)誤消化在內(nèi)部,保證游戲的版本質(zhì)量,但是 QA 部門畢竟有他的局限性,盡管經(jīng)過(guò)嚴(yán)格的測(cè)試也很難保證將所有的問(wèn)題一網(wǎng)打盡.

 

通過(guò)在 Log 中轉(zhuǎn)儲(chǔ)的錯(cuò)誤信息,我們可以進(jìn)一步找出問(wèn)題,但是 Log 文件產(chǎn)生在終端,我們拿到的也僅僅是公司內(nèi)部測(cè)試部門產(chǎn)生的 Log 文件,顯然公司內(nèi)部得到的信息是很有限的,如果能從玩家那里拿到異常信息,我們才能最快的去解決問(wèn)題,盡可能在錯(cuò)誤產(chǎn)生重大影響之前將其解決,所以我們有必要從被動(dòng)的獲取異常信息,轉(zhuǎn)為主動(dòng)去獲?。?/span>

 

可行性 :

       在錯(cuò)誤發(fā)生時(shí) Dump 調(diào)用堆棧,可以讓我們知道錯(cuò)誤發(fā)生的位置,這比已往普通的 LOG 更加有效的多.我們可以將出錯(cuò)的堆棧地址反饋回來(lái).這一切在終端出現(xiàn)異常的時(shí)候自動(dòng)進(jìn)行. Windows 操作系統(tǒng)提供的 SEH 結(jié)構(gòu)化異常機(jī)制可能讓我們?cè)诔绦虮罎⒌乃查g處理這些事情.

 

效率問(wèn)題 :

       SEH windows 的異常機(jī)制,除非在編譯時(shí)候特別指定不使用,否則總有默認(rèn)的 SEH 處理機(jī)制, kernel32.dll 中有默認(rèn)的 SEH 處理接口,當(dāng)我們需要自己處理異常的時(shí)候,我們的處理點(diǎn)會(huì)掛接在異常處理鏈的最前端,這種鏈類似 Hook 的鏈.鏈的頭部放在 fs[0] 的位置.也就是說(shuō)效率的問(wèn)題是可以不必考慮,

 

 

具體實(shí)現(xiàn) :

       通過(guò)閱讀反匯編代碼可以了解函數(shù)調(diào)用過(guò)程中堆棧的結(jié)構(gòu) :

      

       1 函數(shù)調(diào)用時(shí) CALL 將下一行指令地址壓入堆棧

       2 函數(shù)運(yùn)行第一行會(huì)將 EBP 壓入堆棧

       3 保存當(dāng)前堆棧地址到 EBP (mov ebp,esp)

      

       再遇到 call 時(shí)從第一步執(zhí)行,所以每次第二步壓入堆棧的都是上一層函數(shù)調(diào)用的 ESP 地址,而這個(gè)地址 +4 字節(jié)偏移則是當(dāng)前調(diào)用函數(shù)返回后的下一條指令,也就是上一層函數(shù)的地址,所以我們只要知道當(dāng)前函數(shù)的 EBP ( 也就是當(dāng)前函數(shù)的棧頂 ) 就能夠遍歷得到所有調(diào)用堆棧層次.

       dumpebp.jpg

我們將windows SEH 結(jié)構(gòu)化異常引入后,可以在異常發(fā)生的時(shí)候得到當(dāng)前的EBP值,從而通過(guò)這個(gè)值得到整個(gè)調(diào)用堆棧的地址.

 

在發(fā)布工程的時(shí)候,我們只需要生成map文件,就可以通過(guò)這個(gè)地址得到崩潰位置.使用HTTP GET 或POST方式可以將我們所需要的崩潰信息提交到我們指定的網(wǎng)站.這種方式只是通過(guò)URL參數(shù)來(lái)提交數(shù)據(jù),只需要使用API InternetOpenUrl就可以很方便的將信息提交.此外如果不使用HTTP方式,我們也可以在這個(gè)時(shí)候創(chuàng)建新的socket 對(duì)指定的服務(wù)器進(jìn)行連接來(lái)傳輸數(shù)據(jù).

    
    static TCHAR hdrs[] 
= _T("Content-Type: application/x-www-form-urlencoded"); 
    static 
const TCHAR* accept= _T("Accept: */*"); 
        static TCHAR action[]=_T("datecomit.aspx");//預(yù)提交的頁(yè)面
        static TCHAR server[]=_T("192.168.9.119");//提交的server地址

    static TCHAR frmdata[
1024={0}; 
    _tcscpy(frmdata,_T("message=this is a test message");  //提交數(shù)據(jù), message為提交名字   
    
    
// for clarity, error-checking has been removed 
    HINTERNET hSession 
= InternetOpen("MyAgent"
    INTERNET_OPEN_TYPE_PRECONFIG, 
NULLNULL0); 
    HINTERNET hConnect 
= InternetConnect(hSession, server
    INTERNET_DEFAULT_HTTP_PORT, 
NULLNULL, INTERNET_SERVICE_HTTP, 01); 
    HINTERNET hRequest 
= HttpOpenRequest(hConnect, "POST", actionNULLNULL&accept, 01); 
    HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata)); 

 

此后我們只需要定期觀察所提交的內(nèi)容,便可以立即得知是否有異常出現(xiàn).根據(jù)同一異常出現(xiàn)的幾率可以得知是否是致命的錯(cuò)誤,是否需要緊急更新.

 


posted on 2007-03-27 16:32 修一居士 閱讀(5341) 評(píng)論(7)  編輯 收藏 引用

評(píng)論

# re: Dump調(diào)用堆棧的原理以及異常信息的反饋 2007-03-28 15:47 Navi

Windows 操作系統(tǒng)提供的 SHE 結(jié)構(gòu)化異常機(jī)制可能讓我們?cè)诔绦虮罎⒌乃查g處理這些事情

SEH not SHE.  回復(fù)  更多評(píng)論   

# re: Dump調(diào)用堆棧的原理以及異常信息的反饋 2007-03-29 13:31 南斗

筆誤,已改  回復(fù)  更多評(píng)論   

# re: Dump調(diào)用堆棧的原理以及異常信息的反饋 2007-05-11 22:02 nick

坦白說(shuō), 通過(guò)這種方式獲取調(diào)用棧并不理想.
首先是繁瑣.
其次是有局限. 遇上 FPO 就不行了. 而現(xiàn)在的程序, 尤其是游戲程序, 哪個(gè)不是優(yōu)化到極致.

其實(shí)最好的辦法還是 minidump. 一個(gè)幾十K的 dump 文件就可以包含完整的調(diào)用棧了. 再大一點(diǎn)的文件就可以包含臨時(shí)變量、參數(shù)等的值了.
可以看看 www.debuginfo.com 上面關(guān)于 minidump 的文章.

我的 blog 上也有一個(gè)例子. 基本上是抄 debuginfo 的. 呵呵  回復(fù)  更多評(píng)論   

# re: Dump調(diào)用堆棧的原理以及異常信息的反饋 2007-05-26 00:29 南斗

獲取簡(jiǎn)單的堆棧地址已經(jīng)完全夠用了,用minidump弄那么大的dump文件我還要傳回服務(wù)器你不覺(jué)得很恐怖嗎,利用調(diào)用堆棧地址在map文件中就可以找到所有的問(wèn)題了,我在我的項(xiàng)目中一直用這個(gè)方法 ;)  回復(fù)  更多評(píng)論   

# re: Dump調(diào)用堆棧的原理以及異常信息的反饋 2008-03-20 11:01 Bright

@nick
不錯(cuò)啊!終于找到能產(chǎn)生MiniDump文件的方法了,非常感謝!!  回復(fù)  更多評(píng)論   

# re: Dump調(diào)用堆棧的原理以及異常信息的反饋 2008-07-29 16:07 ershu

不是很好的方法。還有其他的方法,我們也使用過(guò)。都不是很好。信息不準(zhǔn)確。

minidump是我們?cè)囘^(guò)最好的方法。微軟自己也用它。

minidump壓縮一下以后才10幾k?上傳到你們的服務(wù)器就不行了?
我們的服務(wù)器工作得很好。  回復(fù)  更多評(píng)論   

# re: Dump調(diào)用堆棧的原理以及異常信息的反饋 2010-07-07 12:00 南斗

@ershu
呵呵 這要看你的具體應(yīng)用了,我這里應(yīng)用在游戲客戶端的崩潰記錄,同時(shí)在線的用戶數(shù)量可能有幾十萬(wàn),畢竟為了節(jié)約成本只會(huì)配置這樣一臺(tái)崩潰信息記錄服務(wù)器,所以上傳還是盡量越少越好。

而實(shí)際上我們也不需要那么詳細(xì)的崩潰記錄信息,minidump大部分記錄了當(dāng)前的進(jìn)程、線程、以及內(nèi)存狀況,實(shí)際上我們只需要簡(jiǎn)單的堆棧信息就夠用了。

對(duì)于信息記錄不準(zhǔn)確的問(wèn)題,我想這個(gè)一般都是因?yàn)楫?dāng)前指令指針錯(cuò)誤,跳躍到了非法的地址,而無(wú)法通過(guò)ebp反推出堆棧信息,目前應(yīng)該是無(wú)論何種方法都解決不了的。  回復(fù)  更多評(píng)論   


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


導(dǎo)航

<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

統(tǒng)計(jì)

常用鏈接

留言簿(3)

隨筆檔案

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区二区三区色| 亚洲小少妇裸体bbw| 亚洲精品乱码久久久久久日本蜜臀| 国产精品一区二区三区四区五区 | 亚洲精品国产系列| 鲁大师成人一区二区三区| 另类春色校园亚洲| 亚洲第一精品福利| 亚洲精品美女| 亚洲在线播放| 久久久免费观看视频| 免播放器亚洲一区| 欧美劲爆第一页| 国产精品日产欧美久久久久| 国产真实乱偷精品视频免| 国内精品久久久| 一本色道综合亚洲| 久久精品中文字幕一区二区三区| 免费91麻豆精品国产自产在线观看| 亚洲国产精品嫩草影院| 中国女人久久久| 久久人人爽国产| 欧美日韩亚洲一区在线观看| 国产乱人伦精品一区二区 | 午夜精品久久久久影视 | 韩国一区二区三区美女美女秀| 亚洲国产精品一区二区三区| 亚洲视频在线播放| 久久免费视频观看| 99ri日韩精品视频| 久久天天躁狠狠躁夜夜爽蜜月| 欧美日韩大片| 亚洲电影视频在线| 西瓜成人精品人成网站| 亚洲国产美女精品久久久久∴| 亚洲综合丁香| 欧美激情成人在线| 国内成人在线| 欧美一区成人| 一区二区日韩免费看| 欧美va亚洲va香蕉在线| 国产午夜精品理论片a级大结局| 日韩视频在线一区二区| 欧美mv日韩mv亚洲| 久久精品国内一区二区三区| 国产精品欧美久久久久无广告| 亚洲乱码日产精品bd| 国产精品资源| 欧美第一黄色网| 黄色日韩精品| 久久久久久亚洲精品杨幂换脸| 一本久道久久综合狠狠爱| 蜜臀a∨国产成人精品| 国产在线精品一区二区夜色| 亚洲欧美在线观看| 一区二区精品在线| 欧美区日韩区| 一卡二卡3卡四卡高清精品视频| 欧美国产专区| 美女国产精品| 亚洲精品国产品国语在线app| 欧美ab在线视频| 美女视频一区免费观看| 亚洲国产精品一区二区久| 欧美国产三区| 欧美精品日韩综合在线| 一区二区三区四区五区视频| 99精品久久免费看蜜臀剧情介绍| 欧美日韩午夜剧场| 亚洲欧美日韩在线| 亚洲欧美综合国产精品一区| 国产色产综合色产在线视频| 久久久久久国产精品mv| 久久另类ts人妖一区二区| 亚洲黄一区二区三区| 亚洲国产精品成人综合| 欧美激情一区二区三区成人| 9色精品在线| 亚洲一区三区电影在线观看| 国产拍揄自揄精品视频麻豆| 久久久久免费视频| 久久全国免费视频| 99国产精品私拍| 亚洲欧美一区二区精品久久久| 国内精品视频久久| 亚洲国产精品一区二区尤物区| 欧美日韩国产在线观看| 久久本道综合色狠狠五月| 久久免费精品视频| 亚洲视频欧美视频| 欧美综合国产精品久久丁香| 亚洲高清视频一区二区| 妖精视频成人观看www| 精品动漫3d一区二区三区免费| 91久久综合亚洲鲁鲁五月天| 国产精品久久久久久久午夜片 | 亚洲国产一区二区视频| 一区二区三区不卡视频在线观看 | 欧美视频在线观看一区| 久久精品日韩欧美| 欧美喷水视频| 久久先锋影音| 欧美午夜精品久久久| 免费成人av在线| 国产精品爽黄69| 99综合在线| 久久久久久亚洲精品不卡4k岛国| 欧美成人综合一区| 久久久99爱| 欧美网站大全在线观看| 裸体丰满少妇做受久久99精品| 欧美性淫爽ww久久久久无| 亚洲电影激情视频网站| 国产亚洲欧美日韩美女| 日韩亚洲欧美成人一区| 永久555www成人免费| 亚洲欧美欧美一区二区三区| 一区二区三区四区国产| 免费观看成人www动漫视频| 久久激情五月激情| 国产精品成人久久久久| 亚洲精品极品| 亚洲激情成人在线| 久久久精品视频成人| 久久激情网站| 国产精品资源| 亚洲欧美在线aaa| 午夜精品在线| 国产精品丝袜xxxxxxx| 亚洲视频一区二区免费在线观看| 夜夜狂射影院欧美极品| 欧美精品一区二区蜜臀亚洲| 亚洲电影在线看| 91久久久久| 欧美成人在线免费视频| 亚洲国产成人精品视频| 亚洲日本在线观看| 欧美国产日本高清在线| 亚洲国产精品久久久久久女王| 亚洲国产精品一区二区www在线| 久久精品免费看| 欧美 日韩 国产一区二区在线视频| 激情一区二区| 美女国产精品| 亚洲蜜桃精久久久久久久| 一本色道**综合亚洲精品蜜桃冫| 欧美精品自拍| 亚洲视频二区| 久久爱91午夜羞羞| 一区在线观看| 欧美激情免费在线| 夜夜嗨av一区二区三区| 亚洲欧美综合网| 红桃视频国产精品| 欧美freesex8一10精品| 亚洲肉体裸体xxxx137| 亚洲新中文字幕| 国产一级揄自揄精品视频| 久久国产色av| 亚洲国产专区| 欧美亚洲一区| 亚洲第一色在线| 欧美日韩亚洲一区二区三区四区| 亚洲一区二区精品在线| 久久久久亚洲综合| 亚洲乱码精品一二三四区日韩在线| 欧美视频免费| 久久久久久噜噜噜久久久精品| 亚洲国产精品国自产拍av秋霞| 亚洲已满18点击进入久久| 国产一区二区三区直播精品电影| 美日韩丰满少妇在线观看| 99re热这里只有精品免费视频| 久久精品一区中文字幕| 亚洲久久一区| 国产尤物精品| 亚洲精品日韩一| 国产在线视频欧美| 欧美精品亚洲一区二区在线播放| 亚洲欧美国产制服动漫| 欧美激情导航| 久久精品2019中文字幕| 99精品久久| 国产在线视频欧美| 欧美午夜激情视频| 欧美成人精品高清在线播放| 亚洲免费一在线| 亚洲日本激情| 欧美成人性生活| 久久久av毛片精品| 亚洲欧美乱综合| 99精品免费视频| 亚洲国产日韩欧美在线图片| 国产欧美一区二区三区沐欲 | 欧美大片免费看| 欧美在线综合| 亚洲一二三区视频在线观看| 亚洲精品中文字幕在线| 欧美成人精品不卡视频在线观看| 久久久精品国产一区二区三区 |