當linux平台碰到段錯誤(segmentation fault)的時候,可以通過開啟core dump,讓其產生core dump檔案。
下面是在ubuntu 18.08使用core dump檔案快速定位段錯誤的例子
~$ echo
"/tmp/core-%e-%t"
> /proc/sys/kernel/core_pattern
~$ ulimit -c unlimited
示例**(seg_fault.c):
void
segmentation_fault()
intmain()
gcc編譯(開啟 -g)
~$ gcc -g seg_fault.c -o seg_fault
執行結果
~$ ./seg_fault
segmentation fault (core dumped)
segmentation fault (core dumped)說明已經產生core dump檔案
~$ ls /tmp |
grep core
core-seg_fault-1552306767
使用方法:
~$ gdb [options]
[executable-file [core-file or process-id]
]
~$ gdb ./seg_fault /tmp/core-seg_fault-1552306767
gnu gdb (ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
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-linux-gnu"
.type "show configuration"
for configuration details.
for bug reporting instructions, please see:
<>.
find the gdb manual and other documentation resources online at:
<>.
for help, type
"help"
.type "apropos word" to search for commands related to "word"
...reading symbols from ./seg_fault...done.
[new lwp 4041]
core was generated by `./seg_fault'.
program terminated with signal sigse**, segmentation fault.
#0 0x000055cb02f8360d in segmentation_fault () at seg_fault.c:4
4 *p = '\0';
(gdb)
#0 0x000055cb02f8360d in segmentation_fault () at seg_fault.c:4說明段錯誤發生在**第四行
*p = 『\0』;如果segmantation fault發生的地點(#0)不是很清晰,通過bt命令也可以回溯**的呼叫情況
(gdb) bt
#0 0x000055cb02f8360d in segmentation_fault () at seg_fault.c:4
#1 0x000055cb02f83621 in main () at seg_fault.c:8
(gdb)
嵌入式(linux)平台搭建coredump
1.開啟coredump檔案儲存功能 1 可以直接使用命令 ulimit c unlimited 數字 用來限定core檔案的大小為 無限制 數字 2 可以在 etc profile 中新增該命令,開機即生效。2.修改coredump檔案生成路徑及檔名 1 echo 1 proc sys kerne...
linux開啟core dump自動生成
使用c c 語言開發程式時,當程式crash的時候產生core dump檔案對於除錯程式是很有幫助的。在redhat linux系統中預設是不生成core dump檔案的,這是因為在 etc profile檔案中有這樣一行 ulimit s c 0 dev null 2 1 如何開啟core dum...
linux下core dump的妙用
在unix系統中,常將 主記憶體 main memory 稱為核心 core 因為在使用半導體作為記憶體材料之前,便是使用核心 core 而核心映像 core image 就是 程序 process 執行當時的記憶體內容。當程序發生段錯誤或收到 訊號 signal 而終止執行時,系統會將核心映像寫入...