core dump

什麼叫Core Dump ?

---------------------------

 當一個進程要異常終止時,可以選擇把進程的用戶空間內存數據全部保存到磁盤上,文件名通常是core,這叫做Core Dump。

進程異常終止通常是因爲有Bug,比如非法內存訪問導致段錯誤,事後可以用調試器檢查core文件以查清錯誤原因,這叫做Post-mortemDebug

 一個進程允許產生多大的core文件取決於進程的Resource Limit(這個信息保存在PCB中)。默認是不允許產生core文件的,因爲core文件中可能包含用戶密碼等敏感信息,不安全。

 

在開發調試階段可以用ulimit命令改變這個限制,允許產生core文件。

 

開啓Core Dump並測試

---------------------------

1. ulimit命令改變Shell進程的Resource Limit,允許core文件最大爲1024K:

$ ulimit -c 1024

2. 寫一個死循環程序:

#include <unistd.h>

int main(void)

{

 while(1);

 return 0;

}

3. 前臺運行這個程序,然後在終端鍵入Ctrl-C或Ctrl-\:
$ ./a.out(按Ctrl-C)

$ ./a.out(按Ctrl-\)Quit (core dumped)

$ ls -l core*-rw------- 1 akaedu akaedu 147456 2008-11-05 23:40 core

 ulimit命令改變了Shell進程的Resource Limit,a.out進程的PCB由Shell進程複製而來,所以也具有和Shell進程相同的Resource Limit值,這樣就可以產生Core Dump了。

 

 

 

 

發佈了25 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章