1. 程式人生 > >Linux 下的 core dump

Linux 下的 core dump

core dump 的基本概念      當一個程序要異常終止時 ,可以選擇把程序的使用者空間記憶體資料全部儲存到磁碟上 ,檔名通常是 core, 這叫做 Core Dump通常情況下,core檔案會包含了程式執行時的記憶體,暫存器狀態,堆疊指標,記憶體管理資訊還有各種函式呼叫堆疊資訊等,我們可以理解為是程式工作當前狀態儲存生成第一個檔案,程式出錯的時候理論上都會產生一個core檔案,通過工具分析這個檔案,我們可以定位到程式異常退出的時候對應的堆疊呼叫等資訊,找出問題所在並進行及時解決。   程序異常終止通常是因為有Bug, 比如,非法記憶體訪問導致段錯誤 ,事後可以用偵錯程式檢查 core檔案以查清錯誤原因 ,這叫做Post-mortem Debug 。一個程序允許產生多大的 core檔案取決於程序的 Resource Limit( 這個資訊儲存 在 PCB中 )。   開啟或關閉core檔案
  預設是不允許產生 core檔案的 ,因為 core檔案中可能包含使用者密碼等敏感資訊 ,不安全;除此之外,每core dump一次就會產生一個core檔案,次數多了佔用記憶體空間,所以一般預設情況下是不允許生成core檔案的,除非由於後臺測試的需要,你自己對該項設定進行了更改。
$ ulimit -a 
利用上面的命令我們可以檢視系統設定的core檔案選項:

  在開發除錯階段可以用 ulimit 命令改變這個限制 ,允許產生 core檔案。

  $ ulimit -c [size]
 例如:  用ulimit 命令改變Shell 程序的 Resource Limit,允許 core檔案最大為 1024K。這樣程序被down掉後,就會產生core檔案了
$ ulimit -c 1024

  

當然,如果不想生成core檔案,可以使用命令: $ ulimit -c 0

  實 例

 SIGQUIT訊號(鍵入Ctrl-\) 的預設處理動作是終止程序並且core dump!

寫一個死迴圈程式,前臺執行這個程式,然後鍵入 Ctrl-\ ,使該程序收到SIGQUIT訊號後終止併產生core檔案

/*************************************************************************
 > File Name: test.c
 > Author:Lynn-Zhang
 > Mail: 
[email protected]
> Created Time: Fri 15 Jul 2016 03:03:57 PM CST ************************************************************************/ #include<stdio.h> int main() { printf("pid is :%d\n",getpid()); while(1); return 0; }

  

這裡的core.2678就是該程序被down掉所對應的core檔案,其中的2678是該程序的pid。

ulimit 命令改變了Shell 程序的 Resource Limit,test程序的 PCB由 Shell程序複製而來 ,所以也具有和 Shell程序相同的 Resource Limit值 ,這樣就可以產生 Core Dump了。   core檔案的使用 在core檔案所在目錄下,gdb目標檔案,它會啟動GNU的偵錯程式,來除錯core檔案,並且會顯示 生成此core檔案的程式名,中止此程式的訊號等等

 

 除此之外,core檔案的內容是二進位制的!

相關推薦

Linuxcore dump

在linux下開發時,如果程式突然崩潰了,也沒有任何日誌。這時可以檢視core。從core檔案中分析原因,通過gdb看出程式掛在哪裡,分析前後的變數,找出問題的原因。 core dump基本概念 當程式執行的過程中異常終止或崩潰,作業系統會將程式當時的記

Linux core dump 的 gdb 除錯

一、前言     linux下開發時,有時候程式突然崩潰了,沒有任何日誌。     從core檔案中分析原因,通過gdb看出程式掛在哪裡,分析前後的變數,找出問題的原因。     core檔案都帶有程序名稱、程序ID、和時間,這又是怎麼做到的呢?接下來記錄core檔案的

Linuxcore dump除錯--gdb

在Linux下,程式崩潰時會產生core檔案,記錄錯誤資訊--------即core dump 一、core檔案產生 預設情況下,core dump是關閉的。輸入ulimit -c,檢視儲存core檔案的大小,顯示0,即不會產生core檔案。 設定core檔案大小為某一不為

Linuxcore檔案使用

有時候程式會異常退出而不帶任何日誌,此時就可以使用code檔案進行分析,它會記錄程式執行的記憶體,暫存器,堆疊指標等資訊 什麼是core檔案 通常在Linux下遇到程式異常退出或者中止,

linuxcore檔案設定與檢視

程式異常退出時,核心會生成一個core檔案(是記憶體映像以及除錯資訊)。可以通過使用gdb來檢視core檔案,指示出導致程式出錯的程式碼所在的檔案和行數。  1、檢視系統中core檔案生成的開關是否開啟     1)使用ulimit -c命令可檢視core檔案的生成開

Linux 使用Dump操作MySQL資料庫

Exporting a Compressed MySQL Dump This command will dump a MySQL database, compress it on-the-fly and save it to a file. Replace keywords

Linux 設定core dump

最近本人負責專案中的流媒體轉發模組,查了很多資料後選擇了EasyDarwin作為轉發伺服器。編譯原始碼之後伺服器穩定運行了半個月,但是今天突然不能正常轉發了。由於本人Linux新手,所以沒有在Linux下除錯程式碼的經驗,在群主的指導下知道可以設定core檔案來

Linux如何生成core dump 文件(解決segment fault段錯誤的問題)

http alt 系統設置 images mit 只讀 功能 lin 設置 Linux下的C程序常常會因為內存訪問等原因造成segment fault(段錯誤),如果此時core dump 的功能是打開的,在運行我們的可執行程序時就會生成一個名為core的文件,然後我們就可

Linux 如何產生core檔案(core dump設定)

       今天在Linux下除錯C程式時,出現段錯誤,習慣性的ls下當前目錄,發現沒有生成core檔案。驚訝了一下,怎麼回事?以前都會產生的啊,難不成是程式的問題?後來同事提醒是不是系統沒有開啟生成core dump的設定。 還真是系統設定問題,我的ubuntu14.0

[轉]【已解決】Linux出現Segmentation Fault(core dump)錯誤

最近在Linux環境下做C語言專案,由於是在一個原有專案基礎之上進行二次開發,而且專案工程龐大複雜,出現了不少問題,其中遇到最多、花費時間最長的問題就是著名的“段錯誤”(Segmentation Fault)。藉此機會系統學習了一下,這裡對Linux環境下的

Linux Core dump (一)

作為一個之前一直混跡於windows系統下的人來說,coredump是比較陌生的,那麼到底什麼是coredump呢?怎麼樣會產生core呢?程式出core後要如何除錯呢?下面來簡單介紹一下。 一、什麼

Linux core dump

core dump 的基本概念      當一個程序要異常終止時 ,可以選擇把程序的使用者空間記憶體資料全部儲存到磁碟上 ,檔名通常是 core, 這叫做 Core Dump。通常情況下,core檔案會包含了程式執行時的記憶體,暫存器狀態,堆疊指標,記憶體管理資訊還有各種函式呼叫堆疊資訊等,我們可以理解為是

Linuxcore dump(二)

        之前一篇文章主要介紹了core dump的一些基本概念以及產生的基本原因,這篇文章主要聊一下程式出core之後如何進行最基本的定位。 一、簡單的直觀定位         有時候不用去具

【已解決】Linux出現Segmentation Fault(core dump)錯誤

今天被這個問題搞了半個小時,後來通過新增printf(...)語句的方法找到了錯誤原因,是因為在程式中錯誤的輸出一個為空的字串導致。。。 1. 段錯誤是什麼 一句話來說,段錯誤是指訪問的記憶體超出了系統給這個程式所設定的記憶體空間,例如訪問了不存在的記憶體地址、訪

linux如何開啟core dump

在linux下面就簡單的許多。只要開啟相應的開關,linux會自動在程式crash時生成相應的core檔案。這個檔案和window下的dump檔案類似。  下面是簡單的一些步驟: 1.檢視當前是否已經打開了此開關   通過命令:ulimit -c 如果輸出為 0,則代表沒有開啟。如果為unlimited則已經

linux生成core dump檔案方法及設定

ulimit -c 1024鍵入 ulimit -c如果顯示 1024 那麼說明 coredump 已經被開啟。1024 限制產生的 core 檔案的大小不能超過 1024kb,可以使用引數unlimited,取消該限制ulimit -c unlimited

LINUX Jexus部署ASP.NET Core WebApi

usr netcore stat /tmp tools onf 節點 提示符 微軟 服務器:LINUX ubuntu16.04 開發軟件:VS2015 Update3 dotnet sdk: DotNetCore.1.0.0-VS2015Tools.Previe

linux core-dump生成

profile -c lin pattern 時間戳 use linux proc nbsp 1. echo "ulimit -c 1024" >> /etc/profile / ulimit -c unlimited 2.echo 1 > /proc/

linux下調試core dump文件

post 文件夾 info nbsp div href mit pos tail 參考文章 0 core dump文件 當程序運行的過程中異常終止或崩潰,操作系統會將程序當時的內存狀態記錄下來,保存在一個文件中,這種行為就叫做Core Dump,成為核心轉儲. 除了內

Linux卸載刪除.Net Core

net div yum 遇到 安裝 rem dev 小夥伴 交流群 最近在技術博客和技術交流群遇到很多小夥伴們在Linux下更新或者安裝.Net Core SDK後dotnet命令無法識別等問題,現如下解決: 卸載SDK命令 sudo yum remove dotnet-