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

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

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

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

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

 

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

 

可行性 :

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

 

效率問題 :

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

 

 

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

       通過閱讀反匯編代碼可以了解函數(shù)調(diào)用過程中堆棧的結(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值,從而通過這個(gè)值得到整個(gè)調(diào)用堆棧的地址.

 

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

坦白說, 通過這種方式獲取調(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ù)器你不覺得很恐怖嗎,利用調(diào)用堆棧地址在map文件中就可以找到所有的問題了,我在我的項(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

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

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

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

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

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

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

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


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


導(dǎo)航

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統(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>
            麻豆成人在线播放| 久久精品亚洲精品国产欧美kt∨| 亚洲男女自偷自拍图片另类| 欧美福利一区| 久久资源在线| 亚洲精品三级| 亚洲国内自拍| 蜜臀久久99精品久久久画质超高清 | 亚洲永久免费观看| 一本色道久久88亚洲综合88| 欧美性感一类影片在线播放| 欧美一区二区三区四区高清 | 亚洲国产精品成人一区二区 | 欧美在线视频一区二区| 亚洲风情亚aⅴ在线发布| 91久久久久久国产精品| 欧美三级午夜理伦三级中文幕| 中日韩视频在线观看| 亚洲欧美日韩精品久久亚洲区| 国内精品久久久久伊人av| 在线免费观看视频一区| 国产精品美女久久久免费| 久久久精品国产免大香伊| 亚洲一区二区黄色| 欧美在线网站| 亚洲视频免费| 亚洲美女av网站| 久久成人精品无人区| 美日韩精品免费观看视频| 亚洲女女女同性video| 欧美一区二区在线看| 亚洲精品视频在线| 午夜免费在线观看精品视频| 亚洲精品一区二区三| 欧美在线免费观看亚洲| 一区二区三区久久久| 久久综合久色欧美综合狠狠| 午夜精品一区二区在线观看| 麻豆成人91精品二区三区| 久久精品国产亚洲一区二区三区| 欧美激情综合网| 免费观看国产成人| 午夜精品视频网站| 宅男精品导航| 欧美成人免费网站| 久久综合久久88| 国产精品一区二区在线观看不卡| 亚洲欧洲一区二区天堂久久| 国产小视频国产精品| 一区二区三区久久| 亚洲欧美国产一区二区三区| 国产精品a级| 91久久精品美女高潮| 欧美成人有码| 久久激情视频| 久久精品av麻豆的观看方式| 欧美性理论片在线观看片免费| 亚洲国产日韩美| 亚洲国产女人aaa毛片在线| 久久精品国产一区二区三区免费看| 亚洲一区观看| 国产精品大片| 一区二区三区日韩| 亚洲欧美日韩国产精品| 国产精品久久久久7777婷婷| 一区二区三区毛片| 欧美一级视频精品观看| 夜夜爽www精品| 亚洲欧美自拍偷拍| 国产精品一区二区在线观看| 欧美一区二区精品| 久久综合国产精品| 91久久精品国产91久久| 欧美成人精品高清在线播放| 亚洲国产小视频在线观看| 另类图片国产| 黄网站色欧美视频| 老巨人导航500精品| 亚洲国产精品黑人久久久| 日韩一级黄色大片| 国产精品xvideos88| 新狼窝色av性久久久久久| 久久人91精品久久久久久不卡| 在线观看成人网| 欧美成人亚洲| 亚洲一区二区免费看| 麻豆久久婷婷| 亚洲国产合集| 正在播放欧美视频| 激情综合亚洲| 久久综合网络一区二区| 亚洲国产精品一区二区三区| 亚洲乱码国产乱码精品精天堂 | 久久精品视频网| 亚洲观看高清完整版在线观看| 久久99伊人| 久久久久网址| 一区二区三区.www| 久久琪琪电影院| 9色国产精品| 狠狠干综合网| 国产精品第十页| 久久天堂精品| 亚洲一区二区高清| 亚洲国产另类久久精品| 久久国产欧美日韩精品| 亚洲精品一区在线观看香蕉| 国产精品一区久久| 欧美精品色综合| 欧美一级视频精品观看| 亚洲精品在线一区二区| 久久视频在线免费观看| 亚洲一区影音先锋| 亚洲人成在线播放| 午夜精品一区二区在线观看| 亚洲欧洲精品成人久久奇米网| 欧美在线999| 亚洲免费在线看| 狠狠色伊人亚洲综合网站色| 欧美视频一区二区三区四区| 麻豆精品精华液| 欧美影视一区| 亚洲老司机av| 久久综合久色欧美综合狠狠| 欧美一区二区日韩一区二区| 99热在线精品观看| 亚洲人成在线播放| 欧美国产成人精品| 久久一区二区三区av| 欧美一区影院| 欧美伊人久久久久久久久影院| 宅男在线国产精品| 夜夜嗨av一区二区三区四区| 亚洲精品久久久久久久久久久| 国产有码在线一区二区视频| 国产精品三上| 国产精品区免费视频| 国产精品久久国产精麻豆99网站| 欧美1区2区3区| 蜜桃久久精品一区二区| 猛干欧美女孩| 欧美激情一区二区| 亚洲国产裸拍裸体视频在线观看乱了| 久久久久久亚洲精品不卡4k岛国| 欧美一级网站| 久久国产精品72免费观看| 久久国产精品一区二区| 欧美在线视频在线播放完整版免费观看| 亚洲在线观看免费| 亚洲欧美在线高清| 欧美主播一区二区三区| 久久久美女艺术照精彩视频福利播放| 亚洲激情影院| 日韩午夜激情av| 亚洲性视频h| 久久av一区二区| 欧美精品1区2区3区| 欧美丰满高潮xxxx喷水动漫| 亚洲手机成人高清视频| 亚洲欧美日韩久久精品| 欧美一级一区| 理论片一区二区在线| 欧美激情精品久久久久久免费印度| 欧美激情一区二区三区在线视频| 亚洲国内欧美| 亚洲在线观看免费视频| 欧美一区二区三区啪啪| 久久久久久9999| 欧美国产日韩一二三区| 国产精品久久福利| 今天的高清视频免费播放成人| 亚洲精品国产视频| 欧美日本亚洲| 国产亚洲精品久久久| 亚洲激情午夜| 欧美一区二区三区四区高清 | 免费成人毛片| 亚洲国产精品一区二区久| 欧美日韩免费在线| 国产亚洲精品高潮| 99re这里只有精品6| 久久久久久久久久久成人| 亚洲国产一二三| 欧美一区亚洲| 欧美日韩视频在线| 在线免费一区三区| 西瓜成人精品人成网站| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美一区视频| 亚洲人精品午夜| 欧美在线观看网址综合| 欧美裸体一区二区三区| 黑人巨大精品欧美一区二区小视频| 亚洲精品久久久一区二区三区| 欧美激情精品久久久久久蜜臀| 亚洲欧美一区二区三区久久| 欧美精品在线视频| 在线观看国产精品网站| 亚洲一区网站| 亚洲美女一区|