搜尋
首頁運維linux運維linux core是什麼意思

linux core是什麼意思

Apr 21, 2023 pm 07:14 PM
linux

在linux中,Core是記憶體的意思。當程式運作過程中偵測到異常程式異常退出時, 系統把程式目前的記憶體狀況儲存在一個core檔中, 叫core dumped,也就資訊轉儲;作業系統偵測到目前行程異常時將透過訊號的方式通知目標進程對應的錯誤訊息,常見的訊號有SIGSEGV、SIGBUS等,預設進程接收到對應的訊號都有對應的處理機制。

linux core是什麼意思

本教學操作環境:linux7.3系統、Dell G3電腦。

在Linux下開發中,我們常聽到程式設計師說我的程式core掉了,通常出現這類的問題是低階bug中的記憶體存取越界、使用空指標、堆疊溢位等情況。使程式運作過程中異常退出或終止,滿足這些條件就會產生core的檔案。

為什麼會發生Coredump

Core就是記憶體的意思,這個字源自於很早以前製造記憶體的材料,一直延用到現在,當程式運作過程中偵測到異常程式異常退出時, 系統把程式目前的記憶體狀況儲存在一個core檔中, 叫core dumped,也就訊息轉儲,作業系統偵測到目前進程異常時會透過訊號的方式通知目標進程對應的錯誤訊息,常見的訊號有SIGSEGV,SIGBUS等,預設行程接收到對應的訊號都有對應的處理機制。

以Linux為例,Action則對應訊號的處理方式,紅色框標註為常見訊號

linux core是什麼意思

在此之前最好先了解下一個行程的記憶體佈局, Unix與Linux系統的行程空間佈局會稍微有點不同,核心空間會比Linux小,特別是核心與使用者行程採用分離的位址空間模式,這裡以Linux為例:

linux core是什麼意思

#coredump檔案的儲存位置

#我們知道在Linux系統中,如果進程崩潰了,系統核心會捕捉到進程崩潰訊息,然後將進程的coredump  資訊寫入到檔案中,這個檔案名稱預設是core   。儲存位置與對應的執行程式在同一目錄下,檔案名稱是core,大家可以透過下面的指令看到core檔案的存在位置:

linux core是什麼意思

Core_pattern的格式:

##%p   轉儲過程的PID

%u  (數位)轉儲程序的實際UID
%G  (數位)轉儲過程的實際GID
%s  引起轉儲的信號數
%t   轉儲時間,表示為自1970年1月1日00:00:00 0000(UTC)以來的秒數
% H  主機名(與uname(2)回傳的節點名相同)
%e  可執行檔名(無路徑前綴)
%E  可執行檔的路徑名,以斜線('/')替換為感嘆號('!')。
%C  崩潰過程的核心檔案大小軟資源限制(自Linux 2.6.24開始)

下面的程式可用來示範/ proc / sys / kernel / core_pattern檔案中管道語法的用法。

#include <sys/stat.h>
#include <fcntl.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define BUF_SIZE 1024

int main(int argc, char *argv[])
{
    int tot, j;
    ssize_t nread;
    char buf[BUF_SIZE];
    FILE *fp;
    char cwd[PATH_MAX];

   /* 属性的当前工作目录崩溃的过程*/

    snprintf(cwd, PATH_MAX, "/proc/%s/cwd", argv[1]);
    chdir(cwd);

   /* 将输出写到该目录下的文件"core.info" */

    fp = fopen("core.info", "w+");
	if (fp == NULL)
	{
		exit(EXIT_FAILURE);
	}


   fprintf(fp, "argc=%d\n", argc);
    for (j = 0; j < argc; j++)
	{
        fprintf(fp, "argc[%d]=<%s>\n", j, argv[j]);
	}

   /* 计算标准输入(核心转储)中的字节数*/

    tot = 0;
    while ((nread = read(STDIN_FILENO, buf, BUF_SIZE)) > 0)
	{
        tot += nread;
	}
	
    fprintf(fp, "Total bytes in core dump: %d\n", tot);

   return 0;
}

注意一下:  这里是指在进程当前工作目录的下创建。通常与程序在相同的路径下。但如果程序中调用了chdir函数,则有可能改变了当前工作目录。这时core文件创建在chdir指定的路径下。有好多程序崩溃了,我们却找不到core文件放在什么位置。和chdir函数就有关系。当然程序崩溃了不一定都产生  core文件。

下面通过的命令可以更改coredump文件的存储位置,如下:

echo “|$PWD/core_pattern_pipe_test %p UID=%u GID=%g sig=%s” > 
/proc/sys/kernel/core_pattern

cat /proc/sys/kernel/core_pattern 查看路径已经变为如下:

linux core是什麼意思

下面带大家配置永久的core。只要出现内存访问越界、使用空指针、堆栈溢出等情况,都可以在这个目录下查看。

配置 core

1、首先在根目录下建立一个储存coredump文件的文件夹,命令如下:

mkdir /corefile

2、设置产生coredump文件的大小,命令如下:

ulimit -c unlimited

3、 执行以下两条命令:

echo “1” > /proc/sys/kernel/core_uses_pid       //将1写入到该文件里
echo “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern

将coredump产生的格式制定好写入core_pattern文件,这样当coredump产生时会直接以这种格式存入到根目录下的文件夹corefile中。

4、修改配置文件/etc/profile

vim /etc/profile

添加 ulimit -S -c unlimited > /dev/null 2>&1

linux core是什麼意思

执行命令生效该文件

linux core是什麼意思

5、 在配置文件/etc/rc.local中最后面添加信息(机器重启时会自动加载该命令):添加命令:

rm -rf /corefile/*

机器重启时清空该文件夹,由于产生的coredump文件很大,若不清空的话时间长了会将硬盘占满;

再执行以下两条命令:

echo “1” > /proc/sys/kernel/core_uses_pid
echo “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern

测试
下面写个例子测试一下是否配置好了corefile文件

#include int main(int argc, char *argv[]){ int *p = NULL; *p = 3; return 0; }

编译运行,注意这里需要-g选项编译。

linux core是什麼意思

进入前面创建的corefile文件夹:

linux core是什麼意思

出现core文件表示完成coredump配置。可以用通过readelf命令进行判断是否是core文件:

linux core是什麼意思

執行gdb閱讀core文件,指令為“gdb 程式 對應coredump文件”,這時就進入gdb的提示符號“(gdb)”。

linux core是什麼意思

從紅色方框截圖可以看到,程式中止是因為訊號11。

下面可以透過bt(backtrace)指令(或where)可以看到函數的呼叫堆疊情況:

linux core是什麼意思

即程式執行到test.cpp的第6行是出現段錯誤。原因是指向了空指標。

總結

造成程式coredump的原因有很多,這裡總結一下,主要是記憶體存取越界、使用執行緒不安全的函數、使用空指標、堆疊溢位等等。

這裡要說一下,gdb調試coredump,大部分時候還是只能從core檔案找出core的直覺原因,但是更根本的原因一般還是需要結合程式碼一起分析當時進程的運行上下文場景,才能推測出程式碼問題所在。

相關推薦:《Linux影片教學

#

以上是linux core是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Linux的構建塊:關鍵組件解釋了Linux的構建塊:關鍵組件解釋了Apr 30, 2025 am 12:26 AM

Linux系統的核心組成部分包括內核、文件系統和用戶空間。 1.內核管理硬件資源並提供基本服務。 2.文件系統負責數據存儲和組織。 3.用戶空間運行用戶程序和服務。

使用維護模式:故障排除和修復Linux使用維護模式:故障排除和修復LinuxApr 29, 2025 am 12:28 AM

維護模式是Linux系統中通過單用戶模式或救援模式進入的特殊運行級別,用於系統維護和修復。 1.進入維護模式使用命令“sudosystemctlisolaterescue.target”。 2.在維護模式中,可以檢查並修復文件系統,使用命令“fsck/dev/sda1”。 3.高級用法包括重置root用戶密碼,需掛載文件系統為讀寫模式並編輯密碼文件。

Linux維護模式:了解目的Linux維護模式:了解目的Apr 28, 2025 am 12:01 AM

維護模式用於系統維護和修復,允許管理員在簡化環境中工作。 1.系統修復:修復損壞的文件系統和啟動加載器。 2.密碼重置:重置root用戶密碼。 3.軟件包管理:安裝、更新或刪除軟件包。通過修改GRUB配置或使用特定鍵進入維護模式,執行維護任務後可安全退出。

Linux操作:網絡和網絡配置Linux操作:網絡和網絡配置Apr 27, 2025 am 12:09 AM

Linux網絡配置可以通過以下步驟完成:1.配置網絡接口,使用ip命令臨時設置或編輯配置文件持久化設置。 2.設置靜態IP,適合需要固定IP的設備。 3.管理防火牆,使用iptables或firewalld工具來控製網絡流量。

Linux中的維護模式:系統管理員指南Linux中的維護模式:系統管理員指南Apr 26, 2025 am 12:20 AM

維護模式在Linux系統管理中扮演關鍵角色,幫助進行系統修復、升級和配置變更。 1.進入維護模式可以通過GRUB菜單選擇或使用命令“sudosystemctlisolaterescue.target”。 2.在維護模式下,可以執行文件系統修復和系統更新等操作。 3.高級用法包括重置root密碼等任務。 4.常見錯誤如無法進入維護模式或掛載文件系統,可通過檢查GRUB配置和使用fsck命令修復。

Linux中的維護模式:何時以及為什麼使用它Linux中的維護模式:何時以及為什麼使用它Apr 25, 2025 am 12:15 AM

使用Linux維護模式的時機和原因:1)系統啟動問題時,2)進行重大系統更新或升級時,3)執行文件系統維護時。維護模式提供安全、控制的環境,確保操作的安全性和效率,減少對用戶的影響,並增強系統的安全性。

Linux:基本命令和操作Linux:基本命令和操作Apr 24, 2025 am 12:20 AM

Linux中不可或缺的命令包括:1.ls:列出目錄內容;2.cd:改變工作目錄;3.mkdir:創建新目錄;4.rm:刪除文件或目錄;5.cp:複製文件或目錄;6.mv:移動或重命名文件或目錄。這些命令通過與內核交互執行操作,幫助用戶高效管理文件和系統。

Linux操作:管理文件,目錄和權限Linux操作:管理文件,目錄和權限Apr 23, 2025 am 12:19 AM

在Linux中,文件和目錄管理使用ls、cd、mkdir、rm、cp、mv命令,權限管理使用chmod、chown、chgrp命令。 1.文件和目錄管理命令如ls-l列出詳細信息,mkdir-p遞歸創建目錄。 2.權限管理命令如chmod755file設置文件權限,chownuserfile改變文件所有者,chgrpgroupfile改變文件所屬組。這些命令基於文件系統結構和用戶、組系統,通過系統調用和元數據實現操作和控制。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能