新聞中心
Linux操作系統(tǒng)實現(xiàn)了進程核心dump技術,這使得在程序發(fā)生異?;蛘弑罎⒌那闆r下,能夠將進程所在的狀態(tài)快照存儲下來,以供分析和重現(xiàn)。本文將對Linux進程核心dump技術進行簡要介紹。

我們提供的服務有:成都網(wǎng)站設計、成都網(wǎng)站建設、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、湘潭縣ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的湘潭縣網(wǎng)站制作公司
概述
進程dump是指將進程中的所有數(shù)據(jù)和狀態(tài)信息以二進制文件的方式保存下來,通常也稱為“核心轉儲”。這個核心轉儲可以在之后被加載回運行時內存中,以完成進程的狀態(tài)復原和恢復。
在Linux系統(tǒng)中,進程dump包含了許多信息,包括以下內容:
1. 進程堆棧信息,包括調用鏈和寄存器狀態(tài)等;
2. 進程映像信息,包括在進程內打開的所有文件,加載的硬件模塊和、共享庫等;
3. 進程內存信息,包括虛擬地址空間、內存單元的內容和狀態(tài)等。
進程dump的目的是為了診斷問題或恢復系統(tǒng)狀態(tài)。在出現(xiàn)問題的情況下,使用進程dump可以幫助開發(fā)人員深入了解問題的起因,以便進一步解決它。
進程dump技術
進程dump的實現(xiàn)需要使用操作系統(tǒng)的相關支持,從而能夠訪問和復制進程內存。Linux系統(tǒng)提供了GDB(GNU調試器)作為標準接口,使得使用進程dump技術變得更加容易。
下面是使用進程dump技術的步驟:
1. 準備一個進程——需要dump一個進程時,首先需要讓該進程生成一個核心dump文件。在Linux上,可以使用ulimit命令來調整核心轉儲文件的大小和大小限制。
2. 為進程啟用coredump——在Linux操作系統(tǒng)中,進程dump的行為受到了一定的安全限制。在默認情況下,進程dump被禁用。為了啟用進程dump,需要在終端中執(zhí)行以下命令:
ulimit -c unlimited
這個命令將生成一個大小不受限制的核心dump文件。
3. 檢查coredump設置——使用命令”cat /proc/sys/kernel/core_pattern”,可以查看當前核心dump文件的位置和它的格式。如果你使用的GNU調試器版本早于7.0,則需要使用命令”echo /proc/sys/kernel/core_pattern > /dev/null”來啟用核心dump。
4. 生成核心dump文件——當進程發(fā)生異?;虮罎r,將會生成一個核心dump文件,以供分析和重現(xiàn)問題??梢酝ㄟ^下面的命令來測試是否已經(jīng)開始生成核心dump文件:
kill -SIGABRT [pid]
5. 分析核心dump文件——一旦生成核心dump文件,就可以使用GDB調試器來分析文件。使用GDB的命令“file core”,加載核心dump文件后,可以使用常規(guī)的GDB命令來分析它。
結論
進程dump技術是Linux操作系統(tǒng)中非常重要的一部分。它能夠讓開發(fā)人員在調試和診斷問題時更加高效和準確。本文簡要介紹了Linux進程核心dump技術,介紹了它的實現(xiàn)和使用方式,以便更好地幫助開發(fā)人員解決問題。同時,讀者也可以通過學習進程dump技術,更好地理解Linux操作系統(tǒng)內核和進程管理機制。
相關問題拓展閱讀:
- LINUX core怎么設置
- 如何查看core文件
LINUX core怎么設置
放里面,記得在CMOS里面設置成光驅啟動喲,然后就進入之一個畫面了(由于LINUX安裝時無法抓圖,所以我用數(shù)碼相機拍的,圖片質量很差,請見諒。)
,版本不是問題,所有的LINUX安裝差不多,出現(xiàn)幾排字,上面是要你選擇圖形界面安裝,或是文字界面安裝,屏幕最下面有個BOOT:的提示符,在這里直接按回車就是圖形安裝,輸入TEXT然后回車就是文字安裝,建議你使用圖形的界面進行安裝,如果直接能夠進入圖形安裝,說明你的顯卡配置不成問題了,文字的其實也差不多,不同的是一個用鼠標一個用鍵盤而已,由于LINUX的版本很多,但是安裝方法幾乎相同,所以我這里就以REDHAT7。1的安裝為例,向大家描述整個安裝過程,如果你的是紅旗,藍點,或其他版本,中文的版本,也可以對照進行。
進入圖形界面以后,先是語言選擇畫面,默認是英語,(靠,redhat這真他NN的不象話,就是沒有Chinese選)
然后我們看看,是鍵盤設置,如果你的鍵盤不是很特別,一般就保持默認設置,直接選NEXT
鼠標設置,選擇你的鼠標,PS2接口,串口,兩鍵,三鍵,如果不確定就用默認的,直接選NEXT
然后我們看到一段歡迎的畫面(Welcome to redhat linux),這里無關緊要,直接選NEXT
好,到了安裝選擇的一步,這里分為兩大部分,一是安裝,二是升級,安裝部分又可選擇工作站,服務器,筆記本電腦,和自定義安裝,如果是之一次裝,請先試試,工作站安裝。
然后到了分區(qū)的選項,有兩個選擇,一是用Disk Druid手動分區(qū),二是用fdisk手動分區(qū)。我們選上面的
到了這里,我們就可以看到你的硬盤所有的分區(qū),這里我們要記得彎耐一點,就是用筆記本抄下每行的第二個數(shù)據(jù),如:hda1,hda5,等等,這是你的硬盤上的分區(qū)在LINUX下名字,記下以后,通過修改/etc/fstab文件,可以實現(xiàn)在LINUX下面訪問WINDWOS的分區(qū)。(此方法在后面詳細再講)
我們在LINUX的主分區(qū)上面雙擊鼠標左鍵,就彈出一個對話框,我們輸入一個/以后回車就可以了
這一步我們直接選NEXT,等安裝完以后就可以直接用LINUX啟動計算機。
網(wǎng)絡設置,如果你是撥號的話,就直接選NEXT,如果你是通過局域網(wǎng)或是寬帶上網(wǎng),就需要填寫IP和網(wǎng)關。
網(wǎng)絡服務選擇,我們用暫時默認的
支持語言選擇,如果你英語好,就直接選NEXT,如果你想嘗試漢化REDHAT,那么更好選上中文,如果找不到,就全選。
時區(qū)選擇,這里點一下中國地圖上的城市就可以了
口令設置,輸入你的口令,還可以添加用戶,可以添加可以不添加,口令不輸入的話為空。
自定義軟件,這里把三個空格都打上鉤,然后選NEXT,這樣我們就安裝了2種圖形,GNOME,KDE,以薯鬧扮及游戲,如果你想裝別的軟件,就選中最下面的select individual packages,那么就可以自定義安裝,
里數(shù)灶面軟件很多,我不知道怎么選,所以就全選中了,以后可以慢慢試,不過這里全裝的話,一共有2G多喲
然后是顯卡設置,在這里找到自己的顯卡型號
顯示器設置
這里是設置進入XWINDOWS以后的分辨率,以及文字方式登陸和圖形方式登陸的選擇
然后一直NEXT就可以了,REDHAT7。1的安裝也就到此告一段落了,慢慢等進度條加滿
創(chuàng)建啟動盤,直接選NEXT(記得放軟盤喲),不想創(chuàng)建就選中Skip boot disk creation,再選下一步。
然后連選NEXT就結束了
參考資料:
另外,團IDC網(wǎng)上有許多產品團購,便宜有口碑
我也在看core設置
學到的分享給你:
在用戶的~/.bash_profile里加上ulimit -c unlimited來讓特定的用戶能產生core文件
而ulimit -c 1024 可以設置core文件大小。。。
此外對于產顫悉生的core文件的命名規(guī)則,以下的兩個proc文件系統(tǒng)下的文件會對他產歷洞賣生影響:
1、/proc/sys/kernel/core_uses_pid能控制產生的core文件的文件名中是否添加pid作為擴展
2、/proc/sys/kernel/core_pattern能設置格式化的core文件保存位置或文件名,
例如:/corefile/core-%e-%p-%t將會控制所產生的core文件會存放到/corefile目錄下,產生的文件名為core-命令名-pid-時肢逗間戳
如何查看core文件
在Unix系統(tǒng)下,應用程序崩潰豎遲搜,一般會產生core文件,如何根據(jù)core文件查找問題的所在,并做相應的分析和調試,是非常余歷重要的,本文對此做簡單介紹。
例如,一個程序cmm_test_tool在運行的時候發(fā)生了錯誤,并生成了一個core文件,如下:
-rw-r–r– 1 root cmm_test_tool.c
-rw-r–r– 1 root
cmm_test_tool.o
-rwxr-xr-x 1 root cmm_test_tool
-rw——- 1 root
core.19344
-rw——- 1 root core.19351
-rw-r–r– 1 root
cmm_test_tool.cfg
-rw-r–r– 1 root cmm_test_tool.res
-rw-r–r– 1 root
cmm_test_tool.log
#
就可以利用命令gdb進行查找,參數(shù)一是應用程序的名稱,參數(shù)二是core文件,運行
gdb
cmm_test_tool core.19344結果如下:
# gdb cmm_test_tool core.19344
GNU gdb Red Hat
Linux (5.2.1-4)
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”…
Core was generated by `./cmm_test_tool’.
Program
terminated with signal 11, Segmentation fault.
Reading symbols from
/lib/i686/libpthread.so.0…done.
Loaded symbols for
/lib/i686/libpthread.so.0
Reading symbols from
/lib/i686/libm.so.6…done.
Loaded symbols for /lib/i686/libm.so.6
Reading
symbols from /usr/lib/libz.so.1…done.
Loaded symbols for
/usr/lib/libz.so.1
Reading symbols from
/usr/旦毀lib/libstdc++.so.5…done.
Loaded symbols for
/usr/lib/libstdc++.so.5
Reading symbols from
/lib/i686/libc.so.6…done.
Loaded symbols for /lib/i686/libc.so.6
Reading
symbols from /lib/libgcc_s.so.1…done.
Loaded symbols for
/lib/libgcc_s.so.1
Reading symbols from /lib/ld-linux.so.2…done.
Loaded
symbols for /lib/ld-linux.so.2
Reading symbols from
/lib/libnss_files.so.2…done.
Loaded symbols for /lib/libnss_files.so.2
#0
0×4202cec1 in __strtoul_internal () from
/lib/i686/libc.so.6
(gdb)
進入gdb提示符,輸入where,找到錯誤發(fā)生的位置和堆棧,如下:
(gdb) where
#0 0×4202cec1 in __strtoul_internal () from
/lib/i686/libc.so.6
#1 0×4202d4e7 in strtoul () from
/lib/i686/libc.so.6
#2 0×0804b4da in GetMaxIDFromDB (get_type=2,
max_id=0×806fd20) at cmm_test_tool.c:788
#3 0×0804b9d7 in ConstrctVODProgram
(vod_program=0×40345bdc) at cmm_test_tool.c:946
#4 0×0804a2f4 in
TVRequestThread (arg=0×0) at cmm_test_tool.c:372
#5 0×in
pthread_start_thread () from /lib/i686/libpthread.so.0
(gdb)
至此,可以看出文件出錯的位置是函數(shù) GetMaxIDFromDB
,兩個參數(shù)分別是2和0×806fd20,這個函數(shù)位于源代碼的788行,基于此,我們就可以有針對性的找到問題的根源,并加以解決。
從接觸unix開始就一直聽到和遇到core dump,特別是剛學著使用C語言在AIX下編寫程序的時候,core dump更是時不時就會不請自來。記得當時剛寫應用的時候,提交程序時最怕的就是在運行過程時遇到core dump,對于銀行核心系統(tǒng),特別是使用靜態(tài)應用進程,如果一個相對頻繁一點的交易導致core dump,那么毫無疑問,除了趕緊定位錯誤改程序外,重啟進程甚至無法爭取到多少緩沖的時間來進行代碼的更正和測試。而且往往導致core dump的,就是程序中一個小小的未注意到或者未測試到的一個疏忽。
雖然常常遇到core dump,不過很長時間內,都是出于知道這個名字,知道它導致的后果,知道一部分導致它出現(xiàn)的原因,其他羨纖的就都不甚了了了。說起來,就是自己太懶了,懶得看書……少壯不努力啊??催^一則統(tǒng)計,說60歲以上的老人,超過70%都后悔少壯不努力,不知統(tǒng)計的數(shù)據(jù)能否反映整個社會的情況。不過總的來說,這句古話還是有些道理的。大家不要學我。哈哈
core dump,翻譯過來講,就是核心轉儲。大致上就是指,如果由于應用錯誤,如浮點異常、指令異常等,操作系統(tǒng)將會轉入內核的異常處理,向對應的進程發(fā)送特定的信號(SIGNAL),如果進程中沒有對這些信號進行處理,就會轉入默認的處理,core dump就是其中的一種。如果進程core dump,系統(tǒng)將會終止該進程,同時系統(tǒng)會產生core文件,以供調試使用。這個core文件其實就是內存的映像,即進程執(zhí)行的時候內存的內容,也就是所謂的core dump。平常大家說某某進程core dump了,其實主要的意思就是說:某某進程因為錯誤而被系統(tǒng)自動終止了。
AIX上提供了dbx工具可以對core dump進行調試,協(xié)助定位引起core dump的代碼。最普通的語法是:
dbx 應用名 core文件, 然后使用where命令來顯示調試信息
關于linux 進程 core的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。
創(chuàng)新互聯(lián)成都網(wǎng)站建設公司提供專業(yè)的建站服務,為您量身定制,歡迎來電(028-86922220)為您打造專屬于企業(yè)本身的網(wǎng)絡品牌形象。
成都創(chuàng)新互聯(lián)品牌官網(wǎng)提供專業(yè)的網(wǎng)站建設、設計、制作等服務,是一家以網(wǎng)站建設為主要業(yè)務的公司,在網(wǎng)站建設、設計和制作領域具有豐富的經(jīng)驗。
網(wǎng)站標題:Linux進程核心dump技術簡介(linux進程core)
瀏覽路徑:http://fisionsoft.com.cn/article/djsgids.html


咨詢
建站咨詢
