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

Dump調用堆棧的原理以及異常信息的反饋

Dump 調用堆棧的原理以及異常信息的反饋

動機:

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

 

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

 

可行性 :

       在錯誤發(fā)生時 Dump 調用堆棧,可以讓我們知道錯誤發(fā)生的位置,這比已往普通的 LOG 更加有效的多.我們可以將出錯的堆棧地址反饋回來.這一切在終端出現(xiàn)異常的時候自動進行. Windows 操作系統(tǒng)提供的 SEH 結構化異常機制可能讓我們在程序崩潰的瞬間處理這些事情.

 

效率問題 :

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

 

 

具體實現(xiàn) :

       通過閱讀反匯編代碼可以了解函數(shù)調用過程中堆棧的結構 :

      

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

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

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

      

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

       dumpebp.jpg

我們將windows SEH 結構化異常引入后,可以在異常發(fā)生的時候得到當前的EBP值,從而通過這個值得到整個調用堆棧的地址.

 

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

 

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

 


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

評論

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

Windows 操作系統(tǒng)提供的 SHE 結構化異常機制可能讓我們在程序崩潰的瞬間處理這些事情

SEH not SHE.  回復  更多評論   

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

筆誤,已改  回復  更多評論   

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

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

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

我的 blog 上也有一個例子. 基本上是抄 debuginfo 的. 呵呵  回復  更多評論   

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

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

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

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

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

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

minidump是我們試過最好的方法。微軟自己也用它。

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

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

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

而實際上我們也不需要那么詳細的崩潰記錄信息,minidump大部分記錄了當前的進程、線程、以及內存狀況,實際上我們只需要簡單的堆棧信息就夠用了。

對于信息記錄不準確的問題,我想這個一般都是因為當前指令指針錯誤,跳躍到了非法的地址,而無法通過ebp反推出堆棧信息,目前應該是無論何種方法都解決不了的。  回復  更多評論   

導航

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

統(tǒng)計

常用鏈接

留言簿(3)

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲美女毛片| 欧美日韩亚洲一区二区三区在线 | 午夜精品一区二区三区电影天堂 | 国产日韩欧美中文| 国产精品日日摸夜夜摸av| 国产精品系列在线| 狠狠色丁香婷综合久久| 亚洲清纯自拍| 午夜一区二区三区在线观看| 久久久噜噜噜久久狠狠50岁| 欧美不卡高清| 亚洲特级片在线| 久久久国产一区二区三区| 免费人成网站在线观看欧美高清| 欧美美女福利视频| 国产嫩草一区二区三区在线观看| 精品999成人| 在线一区二区日韩| 久久综合狠狠综合久久综合88| 亚洲国产人成综合网站| 亚洲午夜精品久久| 蜜桃久久精品一区二区| 国产精品久久久久毛片软件| 午夜欧美不卡精品aaaaa| 久久久久久久综合色一本| 欧美日韩国产首页| 伊人久久婷婷色综合98网| 一区二区三区黄色| 蜜桃伊人久久| 先锋亚洲精品| 欧美日韩一区二区三区免费| 怡红院精品视频| 欧美一区二区观看视频| 91久久综合亚洲鲁鲁五月天| 欧美诱惑福利视频| 国产精品久久久久久久久免费樱桃| 黄色小说综合网站| 午夜日韩av| 一本久道综合久久精品| 两个人的视频www国产精品| 国产女人水真多18毛片18精品视频| 亚洲免费观看高清完整版在线观看熊 | 久久精品伊人| 亚洲社区在线观看| 欧美美女福利视频| 亚洲区一区二区三区| 老鸭窝毛片一区二区三区| 亚洲欧美国产毛片在线| 国产精品第一区| 亚洲一区二区三区中文字幕在线| 亚洲国产欧美日韩| 欧美大片在线观看一区二区| 亚洲电影有码| 欧美激情国产日韩| 欧美刺激性大交免费视频 | 久久久欧美精品| 亚洲一区二区三区欧美| 欧美亚州在线观看| 午夜精品av| 午夜天堂精品久久久久| 国产日韩在线一区| 久久精精品视频| 久久激情视频| 在线观看一区视频| 欧美激情五月| 欧美精品在线视频观看| 宅男噜噜噜66国产日韩在线观看| 日韩视频中文字幕| 国产精品美女久久久久av超清| 小处雏高清一区二区三区| 午夜天堂精品久久久久 | 久久高清福利视频| 久久久久久九九九九| 在线日韩成人| 亚洲欧洲在线观看| 国产精品电影网站| 国产日韩欧美精品在线| 久久国产精品一区二区| 久久久久成人精品| 99热免费精品| 亚洲在线视频观看| ●精品国产综合乱码久久久久| 欧美激情网站在线观看| 欧美日韩999| 久久精品国产2020观看福利| 久久亚洲捆绑美女| 亚洲一区在线看| 久久精品在线视频| 一本色道久久综合亚洲精品不卡| 亚洲视频一区在线观看| 在线电影院国产精品| 99在线视频精品| 黄色成人小视频| 日韩视频免费观看| 国产综合色在线| 日韩视频一区二区在线观看 | 一本大道久久a久久综合婷婷| 亚洲一区二区四区| 亚洲国产网站| 亚洲欧美成人网| 亚洲理论在线| 久久精品亚洲乱码伦伦中文 | 蜜臀av国产精品久久久久| 欧美久久久久久| 久久全球大尺度高清视频| 欧美日韩国产一区| 蜜月aⅴ免费一区二区三区| 国产精品久久久久9999| 亚洲国产精品免费| 激情久久久久久| 午夜一区二区三区不卡视频| 一区二区三区**美女毛片| 久久永久免费| 久久综合亚州| 国产性色一区二区| 亚洲免费在线视频一区 二区| 99pao成人国产永久免费视频| 久久久无码精品亚洲日韩按摩| 欧美一区二区视频免费观看| 国产精品国产三级国产aⅴ浪潮| 亚洲欧洲一区| 亚洲级视频在线观看免费1级| 久久国产精品久久久| 欧美在线一区二区| 国产精品一区二区男女羞羞无遮挡 | 国产自产高清不卡| 亚洲综合999| 午夜视频在线观看一区| 国产精品福利网| 一本久道久久综合中文字幕| 一区二区三区欧美亚洲| 欧美日韩一区二区高清| 欧美大片免费看| 国产一区二区三区成人欧美日韩在线观看 | 亚洲人成久久| 亚洲伊人伊色伊影伊综合网| 亚洲国产日韩欧美在线动漫| 亚洲免费在线看| 一区二区三区视频观看| 久久精品视频在线看| 欧美一区在线直播| 欧美日韩综合| 亚洲国产精品一区二区第一页 | 亚洲精品久久久久久久久久久| 亚洲人成艺术| 欧美日韩在线视频一区| 亚洲天堂成人在线视频| 欧美综合第一页| 亚洲国产另类精品专区 | 榴莲视频成人在线观看| 美国十次成人| 最新国产乱人伦偷精品免费网站| 欧美福利影院| 在线综合亚洲| 久久精品一区二区三区四区| 在线播放亚洲| 欧美精品久久99久久在免费线| 一区二区三区欧美成人| 久久久99爱| 亚洲美女黄网| 国产麻豆精品在线观看| 快射av在线播放一区| 亚洲免费高清| 久久久久久有精品国产| 亚洲精品婷婷| 国产久一道中文一区| 免费看的黄色欧美网站| 亚洲图色在线| 亚洲国产美女精品久久久久∴| 午夜久久福利| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美视频免费在线观看| 久久久人人人| 亚洲欧美日韩在线播放| 亚洲激情影院| 久久综合久久美利坚合众国| 中文精品在线| 亚洲国产激情| 国产九色精品成人porny| 欧美激情亚洲一区| 久久精品一区| 亚洲欧美视频在线观看| 9久草视频在线视频精品| 欧美国产精品一区| 久久av一区二区| 亚洲尤物在线视频观看| 亚洲日韩欧美视频一区| 国产综合视频| 国产欧美欧美| 国产精品每日更新| 欧美久久久久久蜜桃| 久久综合中文字幕| 午夜伦欧美伦电影理论片| 一区二区三区高清不卡| 亚洲国产精品久久| 欧美成人久久| 亚洲国产岛国毛片在线| 国产日韩精品在线| 国产精品久久久久久av下载红粉| 欧美激情亚洲自拍|