真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

linuxcore指的是什么

這篇文章主要介紹“l(fā)inux core指的是什么”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“l(fā)inux core指的是什么”文章能幫助大家解決問題。

創(chuàng)新互聯(lián)長期為近1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為惠民企業(yè)提供專業(yè)的做網(wǎng)站、成都做網(wǎng)站,惠民網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

在linux中,Core是內(nèi)存的意思。當程序運行過程中檢測到異常程序異常退出時, 系統(tǒng)把程序當前的內(nèi)存狀況存儲在一個core文件中, 叫core dumped,也就信息轉(zhuǎn)儲;操作系統(tǒng)檢測到當前進程異常時將通過信號的方式通知目標進程相應(yīng)的錯誤信息,常見的信號有SIGSEGV、SIGBUS等,默認情況下進程接收到相應(yīng)的信號都有相應(yīng)的處理機制。

在Linux下開發(fā)中,我們經(jīng)常聽到程序員說我的程序core掉了,通常出現(xiàn)這類的問題是低級bug中的內(nèi)存訪問越界、使用空指針、堆棧溢出等情況。使程序運行過程中異常退出或者終止,滿足這些條件就會產(chǎn)生core的文件。

為什么會發(fā)生Coredump

Core就是內(nèi)存的意思,這個詞源自很早以前制造內(nèi)存的材料,一直延用到現(xiàn)在,當程序運行過程中檢測到異常程序異常退出時, 系統(tǒng)把程序當前的內(nèi)存狀況存儲在一個core文件中, 叫core dumped,也就信息轉(zhuǎn)儲,操作系統(tǒng)檢測到當前進程異常時將通過信號的方式通知目標進程相應(yīng)的錯誤信息,常見的信號有SIGSEGV,SIGBUS等,默認情況下進程接收到相應(yīng)的信號都有相應(yīng)的處理機制。

以Linux為例,Action則對應(yīng)信號的處理方式,紅色框標注為常見信號

linux core指的是什么

在此之前最好先了解下進程的內(nèi)存布局, Unix與Linux系統(tǒng)的進程空間布局會稍微有點不同,內(nèi)核空間會比Linux小,特別是內(nèi)核與用戶進程采用分離的地址空間模式,這里以Linux為例:

linux core指的是什么

coredump文件的存儲位置

我們知道在Linux系統(tǒng)中,如果進程崩潰了,系統(tǒng)內(nèi)核會捕獲到進程崩潰信息,然后將進程的coredump  信息寫入到文件中,這個文件名默認是core   。存儲位置與對應(yīng)的可執(zhí)行程序在同一目錄下,文件名是core,大家可以通過下面的命令看到core文件的存在位置:

linux core指的是什么

Core_pattern的格式:

%p   轉(zhuǎn)儲過程的PID
%u  (數(shù)字)轉(zhuǎn)儲進程的實際UID
%G  (數(shù)字)轉(zhuǎn)儲過程的實際GID
%s  引起轉(zhuǎn)儲的信號數(shù)
%t   轉(zhuǎn)儲時間,表示為自1970年1月1日00:00:00 +0000(UTC)以來的秒數(shù)
%H  主機名(與uname(2)返回的節(jié)點名相同)
%e  可執(zhí)行文件名(無路徑前綴)
%E  可執(zhí)行文件的路徑名,用斜杠(’/’)替換為感嘆號(’!’)。
%C  崩潰過程的核心文件大小軟資源限制(自Linux 2.6.24開始)

下面的程序可用于演示/ proc / sys / kernel / core_pattern文件中管道語法的用法。

#include 
#include 
#include 
#include 
#include 
#include 

#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]);
	}

   /* 計算標準輸入(核心轉(zhuǎn)儲)中的字節(jié)數(shù)*/

    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;
}

注意一下:  這里是指在進程當前工作目錄的下創(chuàng)建。通常與程序在相同的路徑下。但如果程序中調(diào)用了chdir函數(shù),則有可能改變了當前工作目錄。這時core文件創(chuàng)建在chdir指定的路徑下。有好多程序崩潰了,我們卻找不到core文件放在什么位置。和chdir函數(shù)就有關(guān)系。當然程序崩潰了不一定都產(chǎn)生  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 查看路徑已經(jīng)變?yōu)槿缦拢?/p>

linux core指的是什么

下面帶大家配置永久的core。只要出現(xiàn)內(nèi)存訪問越界、使用空指針、堆棧溢出等情況,都可以在這個目錄下查看。

配置 core

1、首先在根目錄下建立一個儲存coredump文件的文件夾,命令如下:

mkdir /corefile

2、設(shè)置產(chǎn)生coredump文件的大小,命令如下:

ulimit -c unlimited

3、 執(zhí)行以下兩條命令:

echo “1” > /proc/sys/kernel/core_uses_pid       //將1寫入到該文件里
echo “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern

將coredump產(chǎn)生的格式制定好寫入core_pattern文件,這樣當coredump產(chǎn)生時會直接以這種格式存入到根目錄下的文件夾corefile中。

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

vim /etc/profile

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

linux core指的是什么

執(zhí)行命令生效該文件

linux core指的是什么

5、 在配置文件/etc/rc.local中最后面添加信息(機器重啟時會自動加載該命令):添加命令:

rm -rf /corefile/*

機器重啟時清空該文件夾,由于產(chǎn)生的coredump文件很大,若不清空的話時間長了會將硬盤占滿;

再執(zhí)行以下兩條命令:

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指的是什么

進入前面創(chuàng)建的corefile文件夾:

linux core指的是什么

出現(xiàn)core文件表示完成coredump配置??梢杂猛ㄟ^readelf命令進行判斷是否是core文件:

linux core指的是什么

運行g(shù)db閱讀core文件,命令為“gdb 程序 對應(yīng)coredump文件”,這時就進入gdb的提示符“(gdb)”。

linux core指的是什么

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

下面可以通過bt(backtrace)命令(或者where)可以看到函數(shù)的調(diào)用棧情況:

linux core指的是什么

即程序執(zhí)行到test.cpp的第6行是出現(xiàn)段錯誤。原因是指向了空指針。

關(guān)于“l(fā)inux core指的是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。


分享文章:linuxcore指的是什么
文章來源:http://weahome.cn/article/jsdjie.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部