這幾天老大給了個需求,說要讓程式在出錯的時候像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可...