国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

關于linux下core dump【總結】

2019-11-02 16:50:01
字體:
來源:轉載
供稿:網友

1、前言

一直在從事linux下后臺開發,經常與core文件打交道。還記得剛開始從事linux下開發時,程序突然崩潰了,也沒有任何日志。我不知所措,同事叫我看看core,我卻問什么是core,怎么看。同事鄙視的眼神,我依然在目。后來學會了從core文件中分析原因,通過gdb看出程序掛再哪里,分析前后的變量,找出問題的原因。當時就覺得很神奇,core文件是怎么產生的呢?難道系統會自動產生,可是我在自己的linux系統上面寫個非法程序測試,并沒有產生core問題?這又是怎么回事呢?今天在ngnix的源碼時候,發現可以在程序中設置core dump,又是怎么回事呢?在公司發現生成的core文件都帶有進程名稱、進程ID、和時間,這又是怎么做到的呢?今天帶著這些疑問來說說core文件是如何生成,如何配置。

2、基本概念

當程序運行的過程中異常終止或崩潰,操作系統會將程序當時的內存狀態記錄下來,保存在一個文件中,這種行為就叫做Core Dump(中文有的翻譯成“核心轉儲”)。我們可以認為 core dump 是“內存快照”,但實際上,除了內存信息之外,還有些關鍵的程序運行狀態也會同時 dump 下來,例如寄存器信息(包括程序指針、棧指針等)、內存管理信息、其他處理器和操作系統狀態和信息。core dump 對于編程人員診斷和調試程序是非常有幫助的,因為對于有些程序錯誤是很難重現的,例如指針異常,而 core dump 文件可以再現程序出錯時的情景。

3、開啟core dump

可以使用命令ulimit開啟,也可以在程序中通過setrlimit系統調用開啟。

程序中開啟core dump,通過如下API可以查看和設置RLIMIT_CORE

#include <sys/resource.h>int getrlimit(int resource, struct rlimit *rlim);int setrlimit(int resource, const struct rlimit *rlim);

參考程序如下所示:

#include <unistd.h>#include <sys/time.h>#include <sys/resource.h>#include <stdio.h>#define CORE_SIZE  1024 * 1024 * 500int main(){  struct rlimit rlmt;  if (getrlimit(RLIMIT_CORE, &rlmt) == -1) {    return -1;   }    printf("Before set rlimit CORE dump current is:%d, max is:%d/n", (int)rlmt.rlim_cur, (int)rlmt.rlim_max);  rlmt.rlim_cur = (rlim_t)CORE_SIZE;  rlmt.rlim_max = (rlim_t)CORE_SIZE;  if (setrlimit(RLIMIT_CORE, &rlmt) == -1) {    return -1;   }    if (getrlimit(RLIMIT_CORE, &rlmt) == -1) {    return -1;   }    printf("After set rlimit CORE dump current is:%d, max is:%d/n", (int)rlmt.rlim_cur, (int)rlmt.rlim_max);  /*測試非法內存,產生core文件*/  int *ptr = NULL;  *ptr = 10;   return 0;}

執行./main, 生成的core文件如下所示

GDB調試core文件,查看程序掛在位置。當core dump 之后,使用命令 gdb program core 來查看 core 文件,其中 program 為可執行程序名,core 為生成的 core 文件名。

以上這篇關于linux下core dump【總結】就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 满洲里市| 孝义市| 含山县| 新巴尔虎左旗| 石门县| 增城市| 柯坪县| 高邑县| 甘德县| 曲水县| 惠州市| 漠河县| 荃湾区| 盐源县| 新竹市| 江阴市| 南岸区| 泰顺县| 白水县| 淮阳县| 鄂温| 林甸县| 兰溪市| 常熟市| 东宁县| 徐州市| 永新县| 晴隆县| 潞西市| 汉阴县| 琼结县| 新龙县| 万宁市| 喀什市| 长寿区| 成武县| 大化| 金乡县| 焉耆| 扎兰屯市| 海南省|