在unix系統中,常將「主記憶體」(main memory) 稱為核心(core),因為在使用半導體作為記憶體材料之前,便是使用核心(core)。而核心映像(core image) 就是 「程序」(process)執行當時的記憶體內容。當程序發生段錯誤或收到「訊號」(signal) 而終止執行時,系統會將核心映像寫入乙個檔案,以作為除錯之用,這就是所謂的核心轉儲(core dump)。core dump通常包含暫存器狀態,堆疊指標,記憶體管理資訊。
core dump可以用在很多場合,使用linux,或者solaris的人可能都有過這種經歷,系統在跑一些壓力測試或者系統負載一大的話,系統就hang住了或者乾脆system panic。這時候就可以通過core dump來定位這類問題。現在很多應用程式出錯時也會出現core dump,比如段錯誤。core dump 對於程式設計人員診斷和除錯程式是非常有幫助的,因為對於有些程式錯誤是很難重現的,例如指標異常,而 core dump 檔案可以再現程式出錯時的情景。
linux預設是不產生core dump檔案的,ulimit -a顯示
linux-pm2g:/mnt/hgfs/e/test # ulimit -a
core file
size (blocks, -c) 1
//core dump file
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file
size (blocks, -f) unlimited
pending signals (-i) 15966
max locked memory (kbytes, -l) 64
maxmemory
size (kbytes, -m) 1746920
open files (-n) 1024
pipe size (512 bytes, -p) 8
posix message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 15966
virtual memory (kbytes, -v) 2555920
file locks (-x) unlimited
ulimit -c 10設定core dump檔案大小。
修改core dump 檔案生成的位置及名稱
echo 『/tmp/dump/core_%e_%s_%t』 > /proc/sys/kernel/core_pattern
產生的core dump檔案將儲存在/tmp目錄下,檔案名字為core_%e_%s_%t,下面為%符號後字母的具體含義
%% a single % character
%p pid of dumped process
%u real uid of dumped process
%g real gid of dumped process
%s number of signal causing dump
%t time of dump (seconds since 0:00h, 1 jan 1970)
%h hostname (same as 『nodename』 returned by uname(2))
%e executable filename
上述配置完成後程式crash時就會產生core dump檔案。
#include
#include
void main()
執行
//產生dbg檔案除錯可以呼叫gdb coredump dump檔案
linux-pm2g:/home/testcpro # gcc -g coredump.c -o coredump
coredump.c: in
function 『main』:
coredump.c:6: warning: return
type
of 『main』 is
not 『int』
linux-pm2g:/home/testcpro # ./coredump
segmentation fault (core dumped)//產生dump檔案
linux-pm2g:/tmp/dump # ls -l
total 12
-rw------- 1 root root 12288 oct 2 23:03 core_coredump_11_1443798198
//通過gdb讀入dump檔案來發現造成段錯誤的**的位置
linux-pm2g:/home/testcpro # gdb coredump /tmp/dump/core_coredump_11_1443798198
gnu gdb (gdb) suse (7.3-0.6
.1)license gplv3+: gnu gpl version 3
or later this is free software: you are free to change and redistribute it.
there is no warranty, to the extent permitted by law. type
"show copying"
and"show warranty"
for details.
this gdb was configured as "x86_64-suse-linux".
for bug reporting instructions, please see:
...reading symbols from /mnt/hgfs/e/test/testcpro/coredump...done.
bfd: warning: /tmp/dump/core_coredump_11_1443798198 is truncated: expected core file size >= 372736, found: 12288.
[new lwp 32468]
cannot access memory at address 0x7f5c802f1188
failed to read a valid object file image from memory.
core was generated by `./coredump'.
program terminated with
signal
11, segmentation fault.
#00x00000000004005c8
in main () at coredump.c:10
10 *a = 100;
(gdb) where
#00x00000000004005c8
in main () at coredump.c:10
linux下core dump檔案的使用
core dump是指當程序發生異常而退出執行時,由kernel將程序當前記憶體寫入乙個檔案中的機制。core dump機制在程式開發過程中很重要,通過core檔案可以很有力地追蹤到異常發生點。1.linux在預設情況下是不生成core檔案的,所以在使用core dump之前,必須先通過ulimit...
Linux下coredump檔案的檢視
linux bt擴充套件 儲存工作c linux下 core 檔案 程式執行過程中,出現了如下資訊 terminate called after throwing an instance of std bad alloc what st9bad alloc aborted core dumped 當...
Linux下core dump (段錯誤)
在linux下開發時,如果程式突然崩潰了,也沒有任何日誌。這時可以檢視core檔案。從core檔案中分析原因,通過gdb看出程式掛在 分析前後的變數,找出問題的原因。當程式執行的過程中異常終止或崩潰,作業系統會將程式當時的記憶體狀態記錄下來,儲存在乙個檔案中,這種行為就叫做core dump 中文有...