1、前言
一直在從事linux下后臺開發(fā),經(jīng)常與core文件打交道。還記得剛開始從事linux下開發(fā)時,程序突然崩潰了,也沒有任何日志。我不知所措,同事叫我看看core,我卻問什么是core,怎么看。同事鄙視的眼神,我依然在目。后來學會了從core文件中分析原因,通過gdb看出程序掛再哪里,分析前后的變量,找出問題的原因。當時就覺得很神奇,core文件是怎么產(chǎn)生的呢?難道系統(tǒng)會自動產(chǎn)生,可是我在自己的linux系統(tǒng)上面寫個非法程序測試,并沒有產(chǎn)生core問題?這又是怎么回事呢?今天在ngnix的源碼時候,發(fā)現(xiàn)可以在程序中設置core dump,又是怎么回事呢?在公司發(fā)現(xiàn)生成的core文件都帶有進程名稱、進程ID、和時間,這又是怎么做到的呢?今天帶著這些疑問來說說core文件是如何生成,如何配置。
2、基本概念
當程序運行的過程中異常終止或崩潰,操作系統(tǒng)會將程序當時的內(nèi)存狀態(tài)記錄下來,保存在一個文件中,這種行為就叫做Core Dump(中文有的翻譯成“核心轉(zhuǎn)儲”)。我們可以認為 core dump 是“內(nèi)存快照”,但實際上,除了內(nèi)存信息之外,還有些關鍵的程序運行狀態(tài)也會同時 dump 下來,例如寄存器信息(包括程序指針、棧指針等)、內(nèi)存管理信息、其他處理器和操作系統(tǒng)狀態(tài)和信息。core dump 對于編程人員診斷和調(diào)試程序是非常有幫助的,因為對于有些程序錯誤是很難重現(xiàn)的,例如指針異常,而 core dump 文件可以再現(xiàn)程序出錯時的情景。
3、開啟core dump
可以使用命令ulimit開啟,也可以在程序中通過setrlimit系統(tǒng)調(diào)用開啟。
程序中開啟core dump,通過如下API可以查看和設置RLIMIT_CORE
#include <sys/resource.h> int getrlimit(int resource, struct rlimit *rlim); int setrlimit(int resource, const struct rlimit *rlim);
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數(shù)據(jù)結構來看看(二) 2017-07-26
![學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓](http://m.roadsoft.com.cn/attached/image/templet/e87d53eb-cf7a-4689-887a-1cd260f416a5.jpg)