強制程序產生coredump,檢測死鎖以及程序快照

2021-09-20 23:42:19 字數 794 閱讀 9124

分類: linux

部落格:linuxfocus.blog.chinaunix.net

在軟體開發的過程中,無論如何努力,bug幾乎都是必不可少的。當某些bug發生時,該程序會產生coredump檔案。通過這個coredump檔案,開發人員可以找到bug的原因。但是coredump的產生,大都是因為程式crash了。

而有些bug是不會導致程序crash的,比如死鎖——這時,程式已經不正常了,可是卻沒有coredump產生。如果環境又不允許gdb除錯,難道我們就束手無策了嗎?針對這種情況,一般情況下,對於這樣的程序,可以利用watchdog監控它們,當發現這些程序很長時間沒有更新其heartbeat時,可以給這些程序傳送可以導致其產生coredump的訊號。根據linux的訊號預設的處理行為,sigquit,sigabrt, sigfpe和sigse**都可以讓該程序產生coredump檔案。這樣我們可以通過coredump來得知死鎖是否發生。當然,如果程序新增了這些訊號的處理函式,那麼就不會產生coredump了。不過,對於sigabrt, sigfpe, sigse**,有誰會為它們加上訊號處理函式呢。

還有一種情況,程序並沒有死鎖或者block在某個位置,但是我們需要在某個指定位置進行除錯,獲取某些變數或者其它資訊。但是,有可能是客戶環境或者生產環境,不允許我們進行長時間的檢測。那麼,我們就需要通過coredump來獲得程序在執行到該點時的快照。

這個時候,可以利用gdb來產生手工產生coredump。在attach上這個程序時,在指定位置打上斷點,當斷點觸發時,使用gdb的命令gcore,可以立即產生乙個coredump。這樣,我們就拿到了這個位置的程序快照。

強制程序產生coredump,檢測死鎖以及程序快照

強制程序產生coredump,檢測死鎖以及程序快照 分類 linux 2011 03 17 22 12 04 部落格 linuxfocus.blog.chinaunix.net 在軟體開發的過程中,無論如何努力,bug幾乎都是必不可少的。當某些bug發生時,該程序會產生coredump檔案。通過這個...

coredump產生的原因

造成程式coredump的原因很多,這裡根據以往的經驗總結一下 1 記憶體訪問越界 a 由於使用錯誤的下標,導致陣列訪問越界 b 搜尋字串時,依靠字串結束符來判斷字串是否結束,但是字串沒有正常的使用結束符 c 使用strcpy,strcat,sprintf,strcmp,strcasecmp等字串操...

Linux開啟產生coredump檔案

在linux上只要開啟core dump檔案開關,當程式crash時系統生成相應的core檔案。檢視當前是否已經開啟了此開關 輸入命令 ulimit c 如果輸出為 0 則代表沒有開啟 如果為unlimited則已經開啟。root localhost ulimit c 0開啟coredump 輸入命...