linux下core dump的妙用

2021-07-05 13:42:45 字數 3730 閱讀 1599

在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 中文有...