捕捉段錯誤訊號,產生core檔案,而不使程序掛掉

2021-10-05 23:08:31 字數 1129 閱讀 8705

這幾天老大給了個需求,說要讓程式在出錯的時候像python那樣列印堆疊,於是網上一頓搜(面向谷歌程式設計),大多是說用exeinfo.h裡的trace_back等函式,但無意間看見了一篇帖子,可以在程式中呼叫gdb列印堆疊,更加方便。附原始碼如下:

#include

#include

#include

#include

#include

#include

#include

void

dump

(int signo)

;char cmd[

1024]=

; file *fp;

printf

("%d signal is coming\n"

,signo)

;snprintf

(buf,

sizeof

(buf)

,"/proc/%d/cmdline"

,getpid()

);if(

!(fp =

fopen

(buf,

"r")))

if(!fgets

(buf,

sizeof

(buf)

,fp)

)fclose

(fp);if

(buf[

strlen

(buf)-1

]=='\n'

) buf[

strlen

(buf)-1

]='\0'

;snprintf

(cmd,

sizeof

(cmd)

,"gdb %s %d -ex=gcore -batch"

,buf,

getpid()

);printf

("cmd is %s\n"

,cmd)

;printf

("will genrate core.%d\n"

,getpid()

);system

(cmd)

;exit(0

);}int

main()

Linux下發生段錯誤時如何產生core檔案

linux下的c程式常常會因為記憶體訪問錯誤等原因造成segment fault 段錯誤 此時如果系統core dump功能是開啟的,那麼將會有記憶體映像轉儲到硬碟上來,之後可以用gdb對core檔案進行分析,還原系統發生段錯誤時刻的堆疊情況。這對於我們發現程式bug很有幫助。使用ulimit a可...

Linux下發生段錯誤時如何產生core檔案

linux下的c程式常常會因為記憶體訪問錯誤等原因造成segment fault 段錯誤 此時如果系統core dump功能是開啟的,那麼將會有記憶體映像轉儲到硬碟上來,之後可以用gdb對core檔案進行分析,還原系統發生段錯誤時刻的堆疊情況。這對於我們發現程式bug很有幫助。使用ulimit a可...

Linux下發生段錯誤時如何產生core檔案

linux下的c程式常常會因為記憶體訪問錯誤等原因造成segment fault 段錯誤 此時如果系統core dump功能是開啟的,那麼將會有記憶體映像轉儲到硬碟上來,之後可以用gdb對core檔案進行分析,還原系統發生段錯誤時刻的堆疊情況。這對於我們發現程式bug很有幫助。使用ulimit a可...