【Z】段錯誤Segment Fault定位,即core dump檔案與gdb定位

來源:互聯網
上載者:User

標籤:訊號   tar   include   body   -bash   rpo   過程   jpg   tail   

 使用C++開發系統有時會出現段錯誤,即Segment Fault。此類錯誤程式直接崩潰,通常沒有任何有用資訊輸出,很難定位bug,因而無從解決問題。今天我們介紹core dump檔案,並使用gdb進行調試,以此來定位段錯誤問題。此文同時用以備忘。

 

一、core dump

Core dump也稱核心轉儲, 當程式運行過程中異常退出時, 由作業系統把程式當前的記憶體狀況儲存在一個core檔案中, 稱之為core dump檔案。

系統預設不產生core dump檔案,可以使用ulimit命令進行查看和設定。

查看。使用ulimit -c 或 ulimit -a命令查看core dump檔案大小,如果core file size為0,則表示此時系統不會自動產生core dump檔案,具體情況1所示。

圖1

設定。我們可以通過ulimit-c unlimited命令,將core file size設定為不受限制unlimited,以此配置系統,使之可以自動產生coredump檔案,具體操作2所示。

圖2

    

二、段錯誤程式

我們編寫一段簡單的段錯誤程式,將之命名為core_test.cpp,代碼如下。編譯運行,系統自動產生了core檔案,3所示。

#include<assert.h> int main() {    assert(0);    return 0;}
 

 

圖3

三、core檔案命名

在生產環境中,一台伺服器上啟動並執行程式較多,如果所有程式的core dump檔案都自動命名為core,則可能造成一定的混亂。為此,我們可以通過設定,使得系統在為core dump檔案命名時註明更多資訊。

        進程號。通過以下設定,可以使core dump檔案名稱為core.pid形式。4所示,系統自動產生了core.3430檔案。

echo "1" >/proc/sys/kernel/core_uses_pid
 

 

圖4

更多資訊。通過以下設定,可以使core dump檔案名稱為core-exe-pid-time形式。4所示,系統自動產生了core-core_test-3465-1416037828檔案。

echo “/coredir/core-%e-%p-%t” > /proc/sys/kernel/core_pattern/
 

 

圖5

    如果我們想進一步訂製core檔案的名稱,可以根據表1的資訊,進行設定。

表1

 

%% 單個%字元

%p 進程ID

%u 進程實際使用者ID

%g 進程的實際組ID

%s 導致本次core dump的訊號

%t core dump的時間戳記 (由1970年1月1日計起的秒數)

%h 主機名稱

%e 程式檔案名稱

 

四、使用gdb定位core dump錯誤

部分博友的部落格中提到使用gdb –c core與where命令定位錯誤。或許是因為配置不同,我實際操作後發現如果使用gdb –c core,則獲得的定位資訊不具有可讀性,具體6所示。

圖6

最終,我使用gdb core_test core命令(其中core_test是發生dump的可執行程式,core是core file),進入gdb後,再使用where命令,可以定位到發生dump的代碼位置,並且具有良好的可讀性,具體7所示。

圖7

 

 

參考

http://blog.csdn.net/ithomer/article/details/5945152

 

【Z】段錯誤Segment Fault定位,即core dump檔案與gdb定位

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.