内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

linuxcore指的是什么

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

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

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

在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)檢測到當前進程異常時將通過信號的方式通知目標進程相應的錯誤信息,常見的信號有SIGSEGV,SIGBUS等,默認情況下進程接收到相應的信號都有相應的處理機制。

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

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   。存儲位置與對應的可執(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 <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]);
	}

   /* 計算標準輸入(核心轉(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ù)就有關系。當然程序崩潰了不一定都產(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、設置產(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 <stdio.h> 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指的是什么

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

linux core指的是什么

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

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

linux core指的是什么

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

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

網(wǎng)頁標題:linuxcore指的是什么
URL鏈接:http://www.rwnh.cn/article4/jsdjie.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、關鍵詞優(yōu)化網(wǎng)站策劃、外貿(mào)建站ChatGPT、App設計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務器托管
许昌市| 永定县| 安义县| 汪清县| 景泰县| 巴马| 哈巴河县| 延寿县| 开阳县| 张掖市| 怀安县| 青海省| 嘉定区| 大埔县| 丹江口市| 富宁县| 海兴县| 弥勒县| 龙南县| 蒲江县| 台中市| 喀喇沁旗| 水富县| 井陉县| 巫溪县| 玉田县| 海门市| 马边| 芒康县| 渝中区| 隆德县| 胶南市| 万盛区| 禹州市| 哈巴河县| 武鸣县| 绍兴市| 江永县| 云霄县| 梁平县| 左权县|