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

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

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

動機:

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

 

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

 

可行性 :

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

 

效率問題 :

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

 

 

具體實現 :

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

      

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

       2 函數運行第一行會將 EBP 壓入堆棧

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

      

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

       dumpebp.jpg

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

 

在發布工程的時候,我們只需要生成map文件,就可以通過這個地址得到崩潰位置.使用HTTP GET 或POST方式可以將我們所需要的崩潰信息提交到我們指定的網站.這種方式只是通過URL參數來提交數據,只需要使用API InternetOpenUrl就可以很方便的將信息提交.此外如果不使用HTTP方式,我們也可以在這個時候創建新的socket 對指定的服務器進行連接來傳輸數據.

    
    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");  //提交數據, 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)); 

 

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

 


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

評論

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

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

SEH not SHE.  回復  更多評論   

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

筆誤,已改  回復  更多評論   

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導航

<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

統計

常用鏈接

留言簿(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>
            亚洲专区国产精品| 国产精品国产成人国产三级| 欧美大学生性色视频| 久久久久**毛片大全| 久久久久久9| 欧美a级一区二区| 亚洲日本欧美日韩高观看| 欧美激情小视频| 亚洲毛片网站| 欧美一区二区视频97| 免费亚洲一区二区| 欧美午夜片欧美片在线观看| 国产综合在线看| 99re6这里只有精品视频在线观看| 亚洲综合精品一区二区| 噜噜噜在线观看免费视频日韩| 最新日韩在线| 久久精品国产99精品国产亚洲性色| 欧美成年视频| 国产免费观看久久| 亚洲免费观看高清在线观看 | 国产精品久久久久77777| 国产午夜亚洲精品羞羞网站| 亚洲人成亚洲人成在线观看图片| 亚洲一区一卡| 欧美激情第3页| 亚洲欧美国产高清| 欧美国产一区二区| 国内揄拍国内精品久久| 午夜精品国产精品大乳美女| 亚洲国产成人久久综合| 欧美一区二区三区免费观看视频 | 国产一区二区日韩精品欧美精品| 亚洲乱码国产乱码精品精可以看| 久久精品论坛| 亚洲欧美日韩在线不卡| 欧美日韩精品一区视频| 激情亚洲网站| 欧美有码视频| 亚洲深夜福利网站| 欧美黄色精品| 亚洲第一中文字幕| 欧美一区二区三区在线观看| 亚洲啪啪91| 麻豆精品在线视频| 精品成人国产在线观看男人呻吟| 亚洲欧美国产精品专区久久| 亚洲日本激情| 免费日韩av电影| 一区在线播放| 久久综合九色欧美综合狠狠| 欧美一级黄色录像| 国产婷婷色一区二区三区| 午夜欧美大尺度福利影院在线看 | 欧美一区二区三区四区高清| 亚洲精品视频一区二区三区| 欧美77777| 亚洲三级影院| 亚洲国产视频一区二区| 免费人成精品欧美精品| 亚洲人成网站999久久久综合| 另类亚洲自拍| 乱码第一页成人| 91久久夜色精品国产网站| 欧美成人午夜| 欧美激情va永久在线播放| 亚洲精品国产精品国自产在线| 欧美高清视频一区| 欧美激情精品久久久| 一本大道久久a久久综合婷婷| 亚洲欧洲日产国产网站| 欧美日韩天天操| 性亚洲最疯狂xxxx高清| 欧美一区二区免费| 亚洲国产va精品久久久不卡综合| 亚洲电影免费观看高清完整版在线| 免费观看日韩| 亚洲小视频在线观看| 亚洲欧美国产高清| 亚洲成人资源| 一本色道久久88亚洲综合88| 国产精品在线看| 欧美电影在线免费观看网站| 欧美激情自拍| 欧美一区二区三区日韩视频| 久久蜜桃精品| 亚洲手机在线| 久久国产精品亚洲va麻豆| 亚洲精品乱码久久久久| 一区二区久久久久久| 国产情人节一区| 欧美高清视频免费观看| 国产精品白丝av嫩草影院 | 一区二区三区不卡视频在线观看| 国产欧美精品国产国产专区| 欧美黄网免费在线观看| 国产精品嫩草99a| 欧美激情网友自拍| 国产午夜精品理论片a级探花| 欧美国产综合| 国产区亚洲区欧美区| 亚洲欧洲日韩在线| 国内精品免费在线观看| 夜色激情一区二区| 亚洲福利视频一区二区| 亚洲一区二区三区在线看| 99re8这里有精品热视频免费| 久久福利毛片| 欧美一区二区女人| 欧美日韩在线看| 亚洲福利视频二区| 黄色成人91| 久久成人精品一区二区三区| 亚洲一区二区三区精品在线| 欧美成人国产一区二区| 午夜精品一区二区三区在线| 亚洲一区久久| 欧美大片免费久久精品三p| 欧美一区二区三区在| 欧美日韩成人一区| 牛牛国产精品| 精品999日本| 久久激情视频| 久久综合久久美利坚合众国| 国产精品一卡二| 亚洲一区www| 亚洲综合大片69999| 欧美日韩福利视频| 欧美国产日韩在线| 亚洲国产高清自拍| 久久婷婷综合激情| 蜜臀久久99精品久久久画质超高清| 国产一区二区三区在线观看视频 | 亚洲伊人一本大道中文字幕| 欧美日韩成人在线观看| 亚洲国产精品成人久久综合一区| 亚洲成色www8888| 免费h精品视频在线播放| 欧美11—12娇小xxxx| 在线观看亚洲一区| 老牛嫩草一区二区三区日本| 老司机午夜免费精品视频| 红桃视频国产一区| 噜噜噜在线观看免费视频日韩| 欧美成人精品1314www| 91久久夜色精品国产网站| 欧美激情五月| 在线一区二区三区四区五区| 午夜免费久久久久| 国产亚洲成精品久久| 久久久久久久一区二区三区| 亚洲高清视频在线观看| 在线一区二区三区做爰视频网站| 国产精品久久夜| 久久精品国产清自在天天线| 欧美大片在线看| 亚洲永久免费av| 国产亚洲欧美一区二区| 久久综合精品一区| 99精品热6080yy久久| 欧美一区二区视频观看视频| 在线视频观看日韩| 欧美日韩视频专区在线播放| 亚洲欧美日韩一区二区三区在线观看| 巨乳诱惑日韩免费av| 日韩亚洲欧美成人| 国产亚洲精品一区二555| 欧美黄色精品| 久久成人免费视频| 99精品国产99久久久久久福利| 久久久www免费人成黑人精品| 亚洲国产精品123| 国产乱码精品1区2区3区| 久久亚洲综合| 亚洲一区二区视频| 亚洲激情网站| 久久亚洲综合色| 亚洲制服丝袜在线| 亚洲激情一区二区三区| 国产精品美女999| 模特精品在线| 亚洲国产成人久久综合一区| 欧美日本久久| 欧美一区二区三区免费视| 欧美黑人多人双交| 亚洲欧美伊人| 亚洲毛片在线免费观看| 国产专区精品视频| 国产精品免费福利| 欧美另类视频在线| 久久在精品线影院精品国产| 亚洲影院色无极综合| 亚洲韩国日本中文字幕| 久久精品视频99| 欧美一区二区三区的| 日韩网站免费观看| 亚洲精品国精品久久99热一| 尤物精品国产第一福利三区 | 亚洲欧美国产日韩中文字幕| 欧美激情亚洲自拍|