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

posts - 14,  comments - 57,  trackbacks - 0

  最近項目開始集中測試了,服務器程序經常crash,由于服務器一般情況下都是關閉了core的,所以好幾次都只能通過雜亂的日志來定位問題。
當然,我們可以通過ulimit來打開core開關,不過這可能帶來新的問題:我們的服務器程序每個core文件大概有1G多,測試期間如果頻繁crash,沒有注意及時清理,一不小心就會把磁盤寫滿,
而且core文件畢竟是和進程程序相關的,有時候找相應版本也是個麻煩事。

能否在程序crash的時候,將callStack以及參數和局部變量都記錄到日志里?
這個技術其實在游戲客戶端已經用了很多年了,一般游戲客戶端crash后,都會彈出一個是否發送錯誤的選擇框,其實就是發送的CallStack的日志和MiniDUmp文件。
要想記錄CallStack就必然涉及到Stack的遍歷,linux下的Stack遍歷使用很簡單,簡單的backtrace就可以搞定,man backtrace就有現成的例子,
這比windows下復雜的頭疼的StackWalk好用的多。

解決了Stack遍歷問題后,還剩下一個問題:如何在程序crash的時候得到通知執行我們自己的dump代碼?
在Windwos下有SEH異常來實現這個功能,而linux下可以通過使用信號在進程crash的時候執行自己的處理代碼。

好了,開始寫個簡單代碼測試下:
首先設置幾個主要crash信號的處理函數
signal(SIGSEGV, &DumpHelper::OnCrash);
signal(SIGABRT, &DumpHelper::OnCrash);
signal(SIGFPE, &DumpHelper::OnCrash);

在OnCrash里我們用前面提到的backtrace系列函數,來記錄堆棧:
void* szStackFrame[100];
int nFrameCount = backtrace(szStackFrame, 100);
char** strFrameInfo = backtrace_symbols(szStackFrame, nFrameCount); 
char szDumpFileName[1024] = {0};
snprintf(szDumpFileName, sizeof(szDumpFileName), "dump_%u.log", (unsigned int)time(NULL) );
FILE* pFile = fopen(szDumpFileName, "wb");
if(!pFile) return;
for(int i = 0; i < nFrameCount; i++)
{
    fprintf(pFile, "%s\n", strFrameInfo[i]);
}
fclose(pFile);
free(strFrameInfo);

接著,設置幾個嵌套調用的函數:
void fun()
{
 //assert(0);
 int* p = NULL;
 *p =3;
}

void fun1()
{
 fun();
}

void fun2()
{
 fun1();
}

void fun3()
{
 fun2();
}

最后,我們在main函數里執行fun3,注意編譯的時候帶上-rdynamic 選項。

運行下,果然可以打印基本的堆棧,不過馬上,發現了新的問題:這個堆棧信息也太簡陋了,只有調用函數的名字,其余的參數、局部變量完全沒有,
這個和gdb能看到的callStack差距也太大了。
解決這個問題最簡單的辦法就是用gdb來打印堆棧,在這里,gdb和其他程序有區別,如果你試圖通過 echo "bt"|gdb -p XXX>a.txt來獲得堆棧,那將會非常失望,
根本不起作用,google了下,基本沒什么解決辦法。
不過gdb 可以從文件讀入指令,例如 gdb XXX<cmddata,這給了我們機會,
system("echo  \"bt full|gcore\">testcmd");
  char dbx[160]={0};
     sprintf(dbx, "gdb -p %d ./main<testcmd >gdbdump_%d.log", getpid(), getpid() );
  system(dbx);

測試運行,發現可以打印詳細的堆棧,不過,要求機器上有gdb.
上面的命令還dump了一個core文件,不過這個core文件的堆棧信息是錯誤的,我不知道為什么。。。。

多線程環境下使用上述辦法,只能輸出一個線程的堆棧,需要先獲取線程數目,然后逐個線程打印堆棧。

最后,為了避免影響正常的coredump,要在OnCrash的處理函數里將信號的處理函數設置為默認。
如果我一定要有core呢,setrlimit吧,去掉core限制即可。
posted on 2011-04-10 14:47 feixuwu 閱讀(1047) 評論(0)  編輯 收藏 引用 所屬分類: 游戲開發
<2011年4月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

文章轉載請注明出處

常用鏈接

留言簿(11)

隨筆分類

隨筆檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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在线| 欧美精品97| 欧美大学生性色视频| 欧美韩日一区| 国产精品xvideos88| 国产一区二区久久| 在线看欧美视频| 99精品国产在热久久下载| 亚洲欧美国产高清va在线播| 久久9热精品视频| 欧美大片在线看免费观看| 亚洲精品一线二线三线无人区| 日韩视频在线你懂得| 香蕉免费一区二区三区在线观看| 久久婷婷久久| 国产精品黄页免费高清在线观看| 国产婷婷色综合av蜜臀av| 亚洲精品一区在线观看| 久久精品国产清高在天天线 | 亚洲人成人一区二区在线观看 | 国产欧美一区二区精品性色| 黄色小说综合网站| 亚洲精品在线视频观看| 久久精品噜噜噜成人av农村| 亚洲国产精品久久久久婷婷884| 一本色道**综合亚洲精品蜜桃冫| 欧美一区二区高清| 欧美另类亚洲| **性色生活片久久毛片| 亚洲欧美一区二区激情| 国产视频在线观看一区二区三区| 亚洲国产美女久久久久| 欧美一区二区三区视频在线观看 | 欧美国产欧美亚州国产日韩mv天天看完整| 欧美色另类天堂2015| 一区免费在线| 欧美在线视频观看| 艳妇臀荡乳欲伦亚洲一区| 麻豆国产精品va在线观看不卡| 国产精品永久在线| 亚洲视频一区在线| 亚洲国产日本| 乱中年女人伦av一区二区| 国产亚洲精品一区二555| 亚洲一级影院| 亚洲理论在线观看| 欧美黑人国产人伦爽爽爽| 国内揄拍国内精品久久| 欧美一区二区免费| 一道本一区二区| 欧美日韩国产在线| 99国产精品久久| 亚洲高清网站| 免费在线一区二区| 亚洲欧洲在线免费| 91久久国产综合久久91精品网站| 久久夜色精品国产噜噜av| 好吊视频一区二区三区四区| 久久久精品国产一区二区三区| 亚洲欧美日韩人成在线播放| 国产精品入口麻豆原神| 亚洲欧美日韩中文视频| 亚洲一二三区在线| 国产精品自拍小视频| 久久久久**毛片大全| 久久精品二区| 亚洲国产天堂久久综合网| 欧美国产视频在线| 欧美日韩大陆在线| 欧美一区二区三区婷婷月色 | 久久久精品日韩| 久久夜精品va视频免费观看| 亚洲国产欧洲综合997久久| 欧美大尺度在线| 欧美精品激情| 西西人体一区二区| 久久精品主播| 日韩视频在线观看一区二区| 99精品欧美一区| 国产欧美一区二区精品性色| 裸体一区二区| 欧美另类亚洲| 久久大香伊蕉在人线观看热2| 欧美第一黄色网| 欧美韩日一区二区| 午夜久久久久| 另类国产ts人妖高潮视频| 一本色道久久综合亚洲精品婷婷 | 亚洲视频欧美在线| 欧美一级成年大片在线观看| 在线成人小视频| 亚洲精品综合精品自拍| 国产伪娘ts一区| 亚洲日本中文字幕| 国产午夜精品全部视频在线播放| 欧美mv日韩mv国产网站app| 欧美精品一区二区在线播放| 久久9热精品视频| 欧美日韩高清在线一区| 久久在线免费观看| 欧美三级在线视频| 欧美成人免费观看| 国产精品日本一区二区| 欧美黄免费看| 国产日韩免费| 亚洲视频1区| 亚洲欧洲美洲综合色网| 亚洲欧美激情视频| 日韩视频在线免费观看| 久久久91精品国产一区二区三区 | 老色鬼精品视频在线观看播放| 亚洲性夜色噜噜噜7777| 可以看av的网站久久看| 欧美专区福利在线| 欧美三级视频在线观看| 亚洲国产91| 亚洲国产精品99久久久久久久久| 亚洲欧美日韩国产综合精品二区 | 亚洲在线播放| 欧美大片在线观看一区二区| 久久久噜噜噜久久久| 国产精品日本欧美一区二区三区| 亚洲精品久久| 亚洲人成欧美中文字幕| 久久综合999| 麻豆精品网站| 狠狠色香婷婷久久亚洲精品| 午夜欧美理论片| 欧美在线免费观看| 国产精品xxxav免费视频| 一本久道综合久久精品| 亚洲一区成人| 国产精品红桃| 性做久久久久久| 久久久999国产| 黄色成人免费网站| 久久午夜影视| 欧美91视频| 亚洲麻豆av| 欧美日韩精品福利| 亚洲免费视频在线观看| 欧美少妇一区| 亚洲一区中文字幕在线观看| 亚洲欧美成人网| 国产欧美一区二区精品性色| 欧美一区在线视频| 另类专区欧美制服同性| 亚洲第一精品电影| 欧美日韩视频专区在线播放 | 欧美一区在线直播| 国产亚洲精品资源在线26u| 久久久青草青青国产亚洲免观| 麻豆成人小视频| 亚洲精品网址在线观看| 欧美性事免费在线观看| 欧美一区二区视频97| 欧美aa在线视频| 亚洲一区二区三区高清| 国产日韩精品在线观看| 美女主播视频一区| 一区二区三区日韩在线观看| 久久久国产精品亚洲一区 | 亚洲男女毛片无遮挡| 国产一区二区三区高清在线观看| 久久久久久夜精品精品免费| 亚洲肉体裸体xxxx137| 性色一区二区三区| 亚洲国产欧美国产综合一区| 欧美日韩亚洲一区二区三区| 久久精品国产亚洲a| 亚洲黄色一区| 久久精品国产77777蜜臀| 亚洲精品自在在线观看| 国产精品亚洲综合久久| 欧美 日韩 国产精品免费观看| 亚洲最新合集| 欧美福利在线| 欧美一区二区三区四区视频| 亚洲美女视频在线观看| 国产揄拍国内精品对白| 欧美男人的天堂| 久久亚洲国产精品一区二区 | 欧美精品一区二区精品网| 亚洲欧美亚洲| 99精品热视频| 欧美激情自拍| 久久精品国产v日韩v亚洲| 一区二区三区久久网| 亚洲第一福利视频| 狠狠干成人综合网| 欧美午夜精品久久久久久久| 免费在线播放第一区高清av| 久久国产精品72免费观看| 亚洲先锋成人| 夜夜嗨av一区二区三区| 91久久夜色精品国产九色| 男男成人高潮片免费网站| 欧美在线看片a免费观看|