導航:首頁 > 文件類型 > linux進程core文件

linux進程core文件

發布時間:2022-05-24 07:58:13

1. linux系統下調試core文件耗不耗資源

linux下core文件調試方法在程序不尋常退出時,內核會在當前工作目錄下生成一個core文件(是一個內存映像,同時加上調試信息)。使用gdb來查看core文件,可以指示出導致程序出錯的代碼所在文件和行數。
1.core文件的生成開關和大小限制
(1)使用ulimit -c命令可查看core文件的生成開關。若結果為0,則表示關閉了此功能,不會生成core文件。
(2)使用ulimit -c filesize命令,可以限制core文件的大小(filesize的單位為kbyte)。若ulimit -c unlimited,則表示core文件的大小不受限制。如果生成的信息超過此大小,將會被裁剪,最終生成一個不完整的core文件。在調試此core文件的時候,gdb會提示錯誤。
2.core文件的名稱和生成路徑
core文件生成路徑:
輸入可執行文件運行命令的同一路徑下。
若系統生成的core文件不帶其它任何擴展名稱,則全部命名為core。新的core文件生成將覆蓋原來的core文件。
(1)/proc/sys/kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作為擴展。文件內容為1,表示添加pid作為擴展名,生成的core文件格式為core.xxxx;為0則表示生成的core文件同一命名為core。
可通過以下命令修改此文件:
echo "1" > /proc/sys/kernel/core_uses_pid
(2)proc/sys/kernel/core_pattern可以控制core文件保存位置和文件名格式。
可通過以下命令修改此文件:
echo "/corefile/core-%e-%p-%t" > core_pattern,可以將core文件統一生成到/corefile目錄下,產生的文件名為core-命令名-pid-時間戳
以下是參數列表:
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加當前uid
%g - insert current gid into filename 添加當前gid
%s - insert signal that caused the coremp into the filename 添加導致產生core的信號
%t - insert UNIX time that the coremp occurred into filename 添加core文件生成時的unix時間
%h - insert hostname where the coremp happened into filename 添加主機名
%e - insert coremping executable name into filename 添加命令名
3.core文件的查看
core文件需要使用gdb來查看。
gdb ./a.out
core-file core.xxxx
使用bt命令即可看到程序出錯的地方。
以下兩種命令方式具有相同的效果,但是在有些環境下不生效,所以推薦使用上面的命令。
(1)gdb -core=core.xxxx
file ./a.out
bt
(2)gdb -c core.xxxx
file ./a.out
bt
4.開發板上使用core文件調試
如果開發板的操作系統也是linux,core調試方法依然適用。如果開發板上不支持gdb,可將開發板的環境(依賴庫)、可執行文件和core文件拷貝到PC的linux下。
在 PC上調試開發板上產生的core文件,需要使用交叉編譯器自帶的gdb,並且需要在gdb中指定solib-absolute-prefix和 solib-search-path兩個變數以保證gdb能夠找到可執行程序的依賴庫路徑。有一種建立配置文件的方法,不需要每次啟動gdb都配置以上變數,即:在待運行gdb的路徑下建立.gdbinit。
配置文件內容:
set solib-absolute-prefix YOUR_CROSS_COMPILE_PATH
set solib-search-path YOUR_CROSS_COMPILE_PATH
set solib-search-path YOUR_DEVELOPER_TOOLS_LIB_PATH
handle SIG32 nostop noprint pass
注意:待調試的可執行文件,在編譯的時候需要加-g,core文件才能正常顯示出錯信息!有時候core信息很大,超出了開發板的空間限制,生成的core信息會殘缺不全而無法使用,可以

2. linux core 怎麼打開

core文件是由應用程序收到系統信號後崩潰產生的,該文件中記錄了程序崩潰的原因(例如收到那種信號),調用堆棧和崩潰時的內存及變數值等等的信息。
打開core文件與編譯時使用的編譯器有關,但絕大多數linux程序是使用gcc編譯器編譯的,因此可使用對應gdb調試器打開,命令格式如下:
$ gdb 應用程序文件名 core文件名
舉例:
$ gdb /usr/bin/gedit ~/core ------ 查看由gedit崩潰產生的core文件
(gdb) bt ------ 或者backtrace, 查看程序運行到當前位置之前所有的堆棧幀情況)
(gdb) quit ------ 退出

如果不知道core文件由哪個文件產生的,可使用file命令顯示
$ file core

3. linux下的core文件是怎麼生成的

在linux平台下,設置core mp文件來生成的方法自: 1 )如何生成 coremp 文件 登陸 LINUX 伺服器,任意位置鍵入 echo "ulimit -c 1024" >> /etc/profile 退出 LINUX 重新登陸 LINUX 鍵入 ulimit -c 如果顯示 1024 那麼說明 coremp 已經被開啟。...

4. linux程序怎麼生成core

在Linux上只要打開core mp文件開關,當程序crash時系統生成相應的core文件。下面是簡單的一些步驟: 1.查看當前是否已經打開了此開關 通過命令:ulimit -c 如果輸出為 0 ,則代表沒有打開。如果為unlimited則已經打開了,就沒必要在做打開。

5. linux 怎麼分析core文件

從接觸unix開始就一直聽到和遇到core mp,特別是剛學著使用C語言在AIX下編寫程序的時候, mp更是時不時就會不請自來。記得當時剛寫應用的時候,提交程序時最怕的就是在運行過程時遇到core mp,對於銀行核心系統,特別是使用靜態應用進程,如果一個相對頻繁一點的交易導致core mp,那麼毫無疑問,除了趕緊定位錯誤改程序外,重啟進程甚至無法爭取到多少緩沖的時間來進行代碼的更正和測試。而且往往導致core mp的,就是程序中一個小小的未注意到或者未測試到的一個疏忽。

雖然常常遇到core mp,不過很長時間內,都是出於知道這個名字,知道它導致的後果,知道一部分導致它出現的原因,其他的就都不甚了了了。說起來,就是自己太懶了,懶得看書......少壯不努力啊。看過一則統計,說60歲以上的老人,超過70%都後悔少壯不努力,不知統計的數據能否反映整個社會的情況。不過總的來說,這句古話還是有些道理的。大家不要學我。哈哈

core mp,翻譯過來講,就是核心轉儲。大致上就是指,如果由於應用錯誤,如浮點異常、指令異常等,操作系統將會轉入內核的異常處理,向對應的進程發送特定的信號(SIGNAL),如果進程中沒有對這些信號進行處理,就會轉入默認的處理,core mp就是其中的一種。如果進程core mp,系統將會終止該進程,同時系統會產生core文件,以供調試使用。這個core文件其實就是內存的映像,即進程執行的時候內存的內容,也就是所謂的core mp。平常大家說某某進程core mp了,其實主要的意思就是說:某某進程因為錯誤而被系統自動終止了。

AIX上提供了dbx工具可以對core mp進行調試,協助定位引起core mp的代碼。最普通的語法是:
dbx 應用名 core文件, 然後使用where命令來顯示調試信息
一般來講,根據工作中遇到的情況,dbx還是能夠比較輕松的根據提示的內容來定位代碼的。不過也有一些特殊情況時,dbx顯示的調試信息過於模糊或者不直觀,這個時候就只能根據經驗來逐步定位了。有時定位起來會耗用相當長的時間。遇到這種情況時,使用日誌文件,通過在代碼中穿插多個寫log的語句,也可以協助發現。因為進程core mp時,日誌當然也中斷了,根據日誌在哪個代碼行之後或之前中止了,可以有效縮小尋找的范圍。甚至,在有些情況下,使用日誌定位是唯一簡便的方法了。

6. linux的dev下的core可以刪除嗎

可以,Core文件其實就是內存的映像,當程序崩潰時,存儲內存的相應信息,主用用於對程序進行調試。當程序崩潰時便會產生core文件,其實准確的應該說是core mp 文件

7. 怎麼查看Linux的core開關,以及如何打開和關閉

mp文件可以在程序crash時,方便我們查看程序crash的地方和上下文信息。在window下,要能生成mp文件,需要自己編寫相應的代碼。不過現在網上可以找到相應的代碼,只要把它下載後然後加到自己的工程中去,就可以了!在linux下面就簡單的許多。只要打開相應的開關,linux會自動在程序crash時生成相應的core文件。這個文件和window下的mp文件類似。
下面是簡單的一些步驟:
1.查看當前是否已經打開了此開關
通過命令:ulimit -c 如果輸出為 0
,則代表沒有打開。如果為unlimited則已經打開了,就沒必要在做打開。
2.通過命令打開
ulimit -c unlimited .然後通過步驟1,可以監測是否打開成功。
3.如果你要取消,很簡單:ulimit -c 0 就可以了
通過上面的命令修改後,一般都只是對當前會話起作用,當你下次重新登錄後,還是要重新輸入上面的命令,所以很麻煩。我們可以把通過修改
/etc/profile文件 來使系統每次自動打開。步驟如下:
1.首先打開/etc/profile文件
一般都可以在文件中找到 這句語句:ulimit -S -c 0 /dev/null
2&1.ok,根據上面的例子,我們只要把那個0 改為
unlimited 就ok了。然後保存退出。
2.通過source /etc/profile 使當期設置生效。
3.通過ulimit -c 查看下是否已經打開。
其實不光這個命令可以加入到/etc/profile文件中,一些其他我們需要每次登錄都生效的都可以加入到此文件中,因為登錄時linux都會載入此文件。比如一些環境變數的設置。
還有一種方法可以通過修改/etc/security/limits.conf文件來設置,這個方法沒有試過,也是網上看到。不過上面兩種就可以了!
最後說一下生成core
mp文件的位置,默認位置與可執行程序在同一目錄下,文件名是core.***,其中***是一個數字。core
mp文件名的模式保存在/proc/sys/kernel/core_pattern中,預設值是core。通過以下命令可以更改core
mp文件的位置(如希望生成到/tmp/cores目錄下)
echo 「/tmp/cores/core」
/proc/sys/kernel/core_pattern
設置完以後我們可以做個測試,寫個程序,產生一個異常。然後看到當前目錄會有個core*的文件。然後我們可以
gdb core。* 程序 進行調試。

8. linux 下如何打開core mp文件開關

mp文件可以在程序crash時,方便我們查看程序crash的地方和上下文信息。在window下,要能生成mp文件,需要自己編寫相應的代碼。不過現在網上可以找到相應的代碼,只要把它下載後然後加到自己的工程中去,就可以了! 在linux下面就簡單的許多。只要打開相應的開關,linux會自動在程序crash時生成相應的core文件。這個文件和window下的mp文件類似。 下面是簡單的一些步驟: 1.查看當前是否已經打開了此開關 通過命令:ulimit -c 如果輸出為 0 ,則代表沒有打開。如果為unlimited則已經打開了,就沒必要在做打開。 2.通過命令打開 ulimit -c unlimited .然後通過步驟1,可以監測是否打開成功。 3.如果你要取消,很簡單:ulimit -c 0 就可以了 通過上面的命令修改後,一般都只是對當前會話起作用,當你下次重新登錄後,還是要重新輸入上面的命令,所以很麻煩。我們可以把通過修改 /etc/profile文件 來使系統每次自動打開。步驟如下: 1.首先打開/etc/profile文件 一般都可以在文件中找到 這句語句:ulimit -S -c 0 /dev/null 2&1.ok,根據上面的例子,我們只要把那個0 改為 unlimited 就ok了。然後保存退出。 2.通過source /etc/profile 使當期設置生效。 3.通過ulimit -c 查看下是否已經打開。 其實不光這個命令可以加入到/etc/profile文件中,一些其他我們需要每次登錄都生效的都可以加入到此文件中,因為登錄時linux都會載入此文件。比如一些環境變數的設置。 還有一種方法可以通過修改/etc/security/limits.conf文件來設置,這個方法沒有試過,也是網上看到。不過上面兩種就可以了! 最後說一下生成core mp文件的位置,默認位置與可執行程序在同一目錄下,文件名是core.***,其中***是一個數字。core mp文件名的模式保存在/proc/sys/kernel/core_pattern中,預設值是core。通過以下命令可以更改core mp文件的位置(如希望生成到/tmp/cores目錄下) echo 「/tmp/cores/core」 /proc/sys/kernel/core_pattern 設置完以後我們可以做個測試,寫個程序,產生一個異常。然後看到當前目錄會有個core*的文件。然後我們可以 gdb core。* 程序 進行調試。

9. linux有多個core文件,怎麼區分它們屬於哪個進程

只在ubuntu上試過, 以例子說明

強制當前shell sigsegv core mp, 當前shell會退出
$kill -SIGSEGV $$

core file 已經產生
$/var/tmp/cores>ls
core

用gdb列出program name
$gdb
GNU gdb (GDB) 7.5-ubuntu
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show ing"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) core-file ./core
[New LWP 1808]
Core was generated by `/usr/local/bin/ksh'.
Program terminated with signal 11, Segmentation fault.
#0 0x00007f654584d707 in ?? ()
(gdb) quit

用知道的program名字來load core, 並列出stack
$gdb /usr/local/bin/ksh core
GNU gdb (GDB) 7.5-ubuntu
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show ing"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /usr/local/bin/ksh...(no debugging symbols found)...done.
[New LWP 1808]

warning: Can't read pathname for load map: Input/output error.
Core was generated by `/usr/local/bin/ksh'.
Program terminated with signal 11, Segmentation fault.
#0 0x00007f654584d707 in kill () at ../sysdeps/unix/syscall-template.S:82
82 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) bt
#0 0x00007f654584d707 in kill () at ../sysdeps/unix/syscall-template.S:82
#1 0x000000000043244c in job_kill ()
#2 0x00000000004322ed in job_walk ()
#3 0x0000000000474ad9 in b_kill ()
#4 0x000000000045d871 in sh_exec ()
#5 0x0000000000412b16 in exfile ()
#6 0x00000000004135ea in sh_main ()
#7 0x0000000000411f7a in main ()

10. linux上的core文件,麻煩牛人們幫忙解釋下是什麼原因

關於UNIX/Linux系統來下面產生的core文件,根據我自使用系統的經驗,通常是由於自己在編寫程序的過程中,由於自己的疏忽,使自己編寫的程序產生了數組越界、或者是程序中的指針指向了一塊無效的內存區域,產生的內存溢出錯誤。這一點在C語言編程過程中尤為明顯,即:雖然定義了一個指針變數,但是未對該變數進行初始化、且判斷該指針是否為空指針,而在後面的程序中又使用到了該變數,這時候肯定就會產生內存溢出錯誤。通常產生的提示信息就是:Segmentfault,CoreDumped!此時再一看自己當前工作的目錄下面,就會自動產生出一個文件名為core的文件,通常該文件佔得空間也是比較大的,至少好幾兆位元組。

閱讀全文

與linux進程core文件相關的資料

熱點內容
桌面的文件怎麼排成一排 瀏覽:846
wow鍛造怎麼升級 瀏覽:338
選編程和學ps哪個好 瀏覽:447
他和誰睡了主演 瀏覽:944
彩票過濾軟體用什麼語言編程好 瀏覽:637
wps如何把文件變成excel 瀏覽:577
紅頭文件word標題 瀏覽:788
蘋果充電寶哪個牌子好 瀏覽:119
測序數據里fast是什麼 瀏覽:576
壓縮文件怎麼改名不會損壞 瀏覽:188
互相看手機的一部電影 瀏覽:842
篩選文件內容怎麼篩 瀏覽:884
工業機器人示教編程是指什麼 瀏覽:566
在線能看的資源電影 瀏覽:308
734什麼錯誤代碼 瀏覽:220
淘寶傳文件軟體 瀏覽:310
韓國電影國語發音 瀏覽:423
第365章天資榜葉凌天 瀏覽:864
大胸乳房電影 瀏覽:200
開網路醫院需要什麼手續 瀏覽:595

友情鏈接