日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
如何生成Linux核心轉儲文件?(linuxcoredump生成)

Linux核心轉儲文件是一種系統(tǒng)信息的記錄方式,可以在系統(tǒng)崩潰或異常退出時提供有用的診斷信息。這些文件包含有操作系統(tǒng)核心內存中的信息,可以用于診斷和解決問題。在本文中,我們將介紹如何生成Linux核心轉儲文件。

成都創(chuàng)新互聯(lián)成都網站建設定制網站,是成都網站營銷公司,為成都辦公窗簾提供網站建設服務,有成熟的網站定制合作流程,提供網站定制設計服務:原型圖制作、網站創(chuàng)意設計、前端HTML5制作、后臺程序開發(fā)等。成都網站改版熱線:028-86922220

1. 理解核心轉儲文件

Linux系統(tǒng)的核心是系統(tǒng)內部的核心,它是系統(tǒng)的大腦,控制著系統(tǒng)的所有操作。當系統(tǒng)崩潰時,核心不支持正常運行,導致操作系統(tǒng)無法回復。此時,系統(tǒng)將生成一個核心轉儲文件,其中封裝了核心在崩潰時的狀態(tài)記錄。

此外,在發(fā)生其他異常情況(如驅動程序出錯等)時,也會生成核心轉儲文件。我們可以使用這些文件來了解問題的起因,快速定位故障點,并確定修復方案。

2. 使用kdump工具生成核心轉儲文件

kdump是Linux內核提供的一個工具,用于生成核心轉儲文件。我們可以通過以下步驟配置kdump并生成核心轉儲文件。

2.1 安裝kdump工具

在大多數(shù)Linux系統(tǒng)中,kdump已經被預裝。如果沒有預裝,可以使用以下命令安裝:

“`shell

yum install kexec-tools crash

“`

2.2 修改kdump配置文件

編輯kdump配置文件/etc/kdump.conf,設置生成的轉儲文件的保存位置:

“`shell

path /var/crash

“`

2.3 啟動kdump服務

啟動kdump服務,并設置開機自啟動:

“`shell

# 啟動服務

systemctl start kdump.service

# 設置開機自啟動

systemctl enable kdump.service

“`

2.4 測試生成核心轉儲文件

使用下面的命令重新啟動系統(tǒng)并強制生成核心轉儲文件:

“`shell

echo c > /proc/sysrq-trigger

“`

重啟后,如果/var/crash目錄中出現(xiàn)了新的文件,說明核心轉儲文件已生成。

3. 使用SysRq生成核心轉儲文件

通過使用系統(tǒng)請求(sysrq)來生成核心轉儲文件是快捷的一種方法。SysRq鍵是一種用于Linux內核的緊急機制,可以用于診斷和修復各種問題。

要使用SysRq生成核心轉儲文件,需要執(zhí)行以下步驟:

3.1 開啟SysRq功能

在/boot/grub2/grub.cfg中,添加sysrq_always_enabled參數(shù)以開啟SysRq功能:

“`shell

# 修改GRUB_CMDLINE_LINUX_DEFAULT參數(shù)

GRUB_CMDLINE_LINUX_DEFAULT=”crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet sysrq_always_enabled”

“`

3.2 重新啟動系統(tǒng)

使用下面的命令重新啟動系統(tǒng):

“`shell

reboot

“`

3.3 生成核心轉儲文件

當系統(tǒng)出現(xiàn)異常情況時,按下Alt + SysRq + C鍵組合,即可生成核心轉儲文件。

4. 使用kerneloops工具生成核心轉儲請求

Kerneloops是一個Linux社區(qū)的項目,旨在收集Linux內核錯誤信息。使用Kerneloops工具將內核崩潰信息上傳到Kerneloops數(shù)據(jù)庫中,方便開發(fā)人員查詢和分析。Kerneloops還支持在內核崩潰時生成核心轉儲文件。

要使用Kerneloops生成核心轉儲文件,需要執(zhí)行以下步驟:

4.1 安裝Kerneloops工具

在大多數(shù)Linux系統(tǒng)中,Kerneloops已經被預裝。如果沒有預裝,可以使用以下命令安裝:

“`shell

yum install kerneloops

“`

4.2 修改Kerneloops配置文件

編輯Kerneloops配置文件/etc/kerneloops.conf,設置生成的轉儲文件的保存位置:

“`shell

# 修改dump_path參數(shù)

dump_path=/var/crash

“`

4.3 啟用Kerneloops服務

啟動Kerneloops服務,并設置開機自啟動:

“`shell

# 啟動服務

systemctl start kerneloops.service

# 設置開機自啟動

systemctl enable kerneloops.service

“`

4.4 測試生成核心轉儲文件

使用下面的命令重新啟動系統(tǒng),并觸發(fā)崩潰事件:

“`shell

sudo systemctl stop avahi-daemon

“`

此時Kerneloops會自動重新啟動服務,在/var/crash目錄下生成核心轉儲文件。

5. 結論

生成Linux核心轉儲文件是診斷和解決系統(tǒng)異常的重要步驟。在本文中,我們介紹了使用kdump、SysRq和Kerneloops工具生成核心轉儲文件的詳細步驟。通過這些方法,您可以快速獲取有用的診斷信息,加快故障排查和修復過程。

相關問題拓展閱讀:

  • linux c內存溢出的core dump bug怎么跟

linux c內存溢出的core dump bug怎么跟

淺析Linux下core文件

當滲螞我們的程序崩潰時,內核有可能把該程序當前內存映射到core文件里,方便程序員找到程序出現(xiàn)問題的地方。最常出 現(xiàn)的,幾乎所有C程序員都出現(xiàn)過的錯誤就是“段錯誤”了。也是最難查出問題原因的一個錯誤。下面我們就針對“段錯誤”來分析core文件的產生、以及我們 如何利用core文件找到出現(xiàn)崩潰的地方。

何謂core文件

當一個程序崩潰時,在進程當前工作目錄的core文件中復制了該進程的存儲圖像。core文件僅僅是一個內存映象(同時加上調試信息),主要是用來調試的。

當程序接收到以下UNIX信號會產生core文件:

名字

說明

ANSI C POSIX.1

SVR4 4.3+BSD

缺省動作

SIGABRT

異常終止(abort)

..

. .

終止w/core

SIGBUS

硬件故障

.

. .

終止w/core

SIGEMT

硬件故障

. .

終止w/core

SIGFPE

算術異常

..

. .

終止w/core

SIGILL

非法硬件指令

..

. .

終止w/core

SIGIOT

硬件故障

. .

終止w/core

SIGQUIT

終端退出符

.

. .

終止w/core

SIGSEGV

無效存儲訪問

..

. .

終止w/core

SIGSYS

無效系統(tǒng)調用

. .

終止w/core

SIGTRAP

硬件故障

. .

終止w/core

SIGXCPU

超過CPU限制(setrlimit)

. .

終止w/core

SIGXFSZ

超過文件長度限制(setrlimit)

. .

終止w/core

在系統(tǒng)默認動作列,“終止w/core”表示在進程當前工作目錄的core文件中復制了該進程的存儲圖像(該文件名為core,由此可以看出這種功能很久之前就是UNIX功能的一部分)。大多數(shù)UNIX調試程序都使用core文件以檢查進程在終止時的狀態(tài)。

core文件的產生不是POSIX.1所屬部分,而是很多UNIX版本的實現(xiàn)特征。UNIX第6版沒有檢查條件 (a)和(b),并且其源代碼中包含如下說明:“如果你正在找尋保護信號,那么當設置-用戶-ID命令顫喊游執(zhí)行時,將可能產生大量的這種信號”。4.3 + BSD產生名為core.prog的文件,其中prog是被執(zhí)行的程序名的前1 6個字符。它對core文件給予了某種標識,所以是一種改進特征。

表中“硬件故障”對應于實現(xiàn)定義的硬件故障。這些名字中有很多取自UNIX早先在DP-11上的實現(xiàn)。請查看你所使用的系統(tǒng)的手冊,以確切地確定這些信號對應于哪些錯誤類型。

下面比較詳細地說明這些信號。

? SIGABRT 調用abort函數(shù)時產生此信號。進程異常終止。

? SIGBUS 指示一個實現(xiàn)定義的硬件故障。

? SIGEMT 指示一個實現(xiàn)定義的硬件故障。

EMT這一名字來自PDP-11的emulator trap 指令。

? SIGFPE 此茄銷信號表示一個算術運算異常,例如除以0,浮點溢出等。

? SIGILL 此信號指示進程已執(zhí)行一條非法硬件指令。

4.3BSD由abort函數(shù)產生此信號。SIGABRT現(xiàn)在被用于此。

? SIGIOT 這指示一個實現(xiàn)定義的硬件故障。

IOT這個名字來自于PDP-11對于輸入/輸出TRAP(input/output TRAP)指令的縮寫。系統(tǒng)V的早期版本,由abort函數(shù)產生此信號。SIGABRT現(xiàn)在被用于此。

? SIGQUIT 當用戶在終端上按退出鍵(一般采用Ctrl-\)時,產生此信號,并送至前臺進

程組中的所有進程。此信號不僅終止前臺進程組(如SIGINT所做的那樣),同時產生一個core文件。

? SIGSEGV 指示進程進行了一次無效的存儲訪問。

名字SEGV表示“段違例(segmentation violation)”。

? SIGSYS 指示一個無效的系統(tǒng)調用。由于某種未知原因,進程執(zhí)行了一條系統(tǒng)調用指令,

但其指示系統(tǒng)調用類型的參數(shù)卻是無效的。

? SIGTRAP 指示一個實現(xiàn)定義的硬件故障。

此信號名來自于PDP-11的TRAP指令。

? SIGXCPU SVR4和4.3+BSD支持資源限制的概念。如果進程超過了其軟C P U時間限制,則產生此信號。

? SIGXFSZ 如果進程超過了其軟文件長度限制,則SVR4和4.3+BSD產生此信號。

摘自《UNIX環(huán)境高級編程》第10章 信號。

使用core文件調試程序

看下面的例子:

/*core_dump_test.c*/

#include

const char *str = “test”;

void core_test(){

str = ‘T’;

}

int main(){

core_test();

return 0;

}

編譯:

gcc –g core_dump_test.c -o core_dump_test

如果需要調試程序的話,使用gcc編譯時加上-g選項,這樣調試core文件的時候比較容易找到錯誤的地方。

執(zhí)行:

./core_dump_test

段錯誤

運行core_dump_test程序出現(xiàn)了“段錯誤”,但沒有產生core文件。這是因為系統(tǒng)默認core文件的大小為0,所以沒有創(chuàng)建。可以用ulimit命令查看和修改core文件的大小。

ulimit -c 0

ulimit -c 1000

ulimit -c 1000

-c 指定修改core文件的大小,1000指定了core文件大小。也可以對core文件的大小不做限制,如:

ulimit -c unlimited

ulimit -c unlimited

如果想讓修改永久生效,則需要修改配置文件,如 .bash_profile、/etc/profile或/etc/security/limits.conf。

再次執(zhí)行:

./core_dump_test

段錯誤 (core dumped)

ls core.*

core.6133

可以看到已經創(chuàng)建了一個core.6133的文件.6133是core_dump_test程序運行的進程ID。

調式core文件

core文件是個二進制文件,需要用相應的工具來分析程序崩潰時的內存映像。

file core.6133

core.6133: ELF 32-bit LSB core file Intel 80386, version 1 (SYSV), SVR4-style, from ‘core_dump_test’

在Linux下可以用GDB來調試core文件。

gdb core_dump_test core.6133

GNU gdb Red Hat Linux (5.3post-0..18rh)

Copyright 2023 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are

welcome to change it and/or distribute copies of it under certain conditions.

Type “show copying” to see the conditions.

There is absolutely no warranty for GDB. Type “show warranty” for details.

This GDB was configured as “i386-redhat-linux-gnu”…

Core was generated by `./core_dump_test’.

Program terminated with signal 11, Segmentation fault.

Reading symbols from /lib/tls/libc.so.6…done.

Loaded symbols for /lib/tls/libc.so.6

Reading symbols from /lib/ld-linux.so.2…done.

Loaded symbols for /lib/ld-linux.so.2

#0 0x080482fd in core_test () at core_dump_test.c:7

str = ‘T’;

(gdb) where

#0 0x080482fd in core_test () at core_dump_test.c:7

#1 0xin main () at core_dump_test.c:12

#2 0xin __libc_start_main () from /lib/tls/libc.so.6

GDB中鍵入where,就會看到程序崩潰時堆棧信息(當前函數(shù)之前的所有已調用函數(shù)的列表(包括當前函數(shù)),gdb只顯示最近幾個),我們很容易找到我們的程序在最后崩潰的時候調用了core_dump_test.c 第7行的代碼,導致程序崩潰。注意:在編譯程序的時候要加入選項-g。您也可以試試其他命令, 如 fram、list等。更詳細的用法,請查閱GDB文檔。

core文件創(chuàng)建在什么位置

在進程當前工作目錄的下創(chuàng)建。通常與程序在相同的路徑下。但如果程序中調用了chdir函數(shù),則有可能改變了當前工 作目錄。這時core文件創(chuàng)建在chdir指定的路徑下。有好多程序崩潰了,我們卻找不到core文件放在什么位置。和chdir函數(shù)就有關系。當然程序 崩潰了不一定都產生core文件。

什么時候不產生core文件

在下列條件下不產生core文件:

( a )進程是設置-用戶-ID,而且當前用戶并非程序文件的所有者;

( b )進程是設置-組-ID,而且當前用戶并非該程序文件的組所有者;

( c )用戶沒有寫當前工作目錄的許可權;

( d )文件太大。core文件的許可權(假定該文件在此之前并不存在)通常是用戶讀/寫,組讀和其他讀。

linux core dump 生成的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于linux core dump 生成,如何生成Linux核心轉儲文件?,linux c內存溢出的core dump bug怎么跟的信息別忘了在本站進行查找喔。

香港服務器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網服務提供商,擁有超過10年的服務器租用、服務器托管、云服務器、虛擬主機、網站系統(tǒng)開發(fā)經驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務器、香港云服務器、免備案服務器等。


分享名稱:如何生成Linux核心轉儲文件?(linuxcoredump生成)
當前地址:http://www.5511xx.com/article/cocdpdc.html