segmentation fault (core dumped)然後,程式崩潰,退出執行。發生這一問題的原因往往是程式中指標不規範使用導致記憶體越界訪問、堆疊溢位、多執行緒程式設計出錯等問題。
這時,如果我們編譯時在命令列加入 -g 選項,就會在出現上述錯誤時自動於當前目錄生成core.******檔案,我們可以利用這一檔案查詢導致上述錯誤的**位置。
core檔案,又稱核心檔案、核心轉儲(core dump),是作業系統在程序收到某些訊號而終止執行時,將此時程序位址空間的內容以及有關程序狀態的其他資訊寫出的乙個磁碟檔案。這種資訊往往用於除錯。1
因此,當我們的程式因為程式設計時的「不小心」導致出現段位址錯誤時,就可以利用core檔案資訊進行錯誤查詢,方便程式設計師及時修正。
首先,要檢查系統是否開啟了core檔案生成功能:
在終端輸入以下命令:
ulimit -a如果顯示core file的size為0,說明沒有開啟core檔案生成功能,輸入以下命令開啟:
ulimit -c ulimited當然,也可以輸入乙個數字指定大小,但一般不建議,因為一旦檔案寫滿可能會遺漏錯誤資訊。
為gcc/g++命令增加 -g 除錯選項
這樣,當程式一旦發生上述錯誤時,就會生成core檔案,將錯誤資訊寫入
core檔案生成後,並不能直接開啟,需要使用以下命令檢視資訊:
gdb ./out core.26591./out為編譯生成的可執行檔案,core.26591要替換成可執行檔案目錄下對應的core檔案檔名,執行後即可看到相應資訊,追蹤產生segmenttation fault的位置及對應函式呼叫情況:
輸入以下命令列:
(gdb)> bt可以檢視發生段錯誤時程序具體執行到了函式的哪一行,以及每乙個函式呼叫時傳遞的引數等資訊,幫助程式設計師查錯!↩︎
Linux下core檔案除錯方法
在程式不尋常退出時,核心會在當前工作目錄下生成乙個core檔案 是乙個記憶體映像,同時加上除錯資訊 使用gdb來檢視core檔案,可以指示出導致程式出錯的 所在檔案和行數。1.core檔案的生成開關和大小限制 1 使用ulimit c命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,...
Linux下core檔案除錯方法
在程式不尋常退出時,核心會在當前工作目錄下生成乙個core檔案 是乙個記憶體映像,同時加上除錯資訊 使用gdb來檢視core檔案,可以指示出導致程式出錯的 所在檔案和行數。1.core檔案的生成開關和大小限制 1 使用ulimit c命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,...
Linux下core檔案除錯方法
在程式不尋常退出時,核心會在當前工作目錄下生成乙個core檔案 是乙個記憶體映像,同時加上除錯資訊 使用gdb來檢視core檔案,可以指示出導致程式出錯的 所在檔案和行數。1.core檔案的生成開關和大小限制 1 使用ulimit c命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,...