人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

Linux下如何使用gdb調(diào)試core文件

發(fā)布日期:2022-01-26 16:10 | 文章來源:gibhub

1.core文件

當程序運行過程中出現(xiàn)Segmentation fault (core dumped)錯誤時,程序停止運行,并產(chǎn)生core文件。core文件是程序運行狀態(tài)的內(nèi)存映象。使用gdb調(diào)試core文件,可以幫助我們快速定位程序出現(xiàn)段錯誤的位置。當然,可執(zhí)行程序編譯時應(yīng)加上-g編譯選項,生成調(diào)試信息。

當程序訪問的內(nèi)存超出了系統(tǒng)給定的內(nèi)存空間,就會產(chǎn)生Segmentation fault (core dumped),因此,段錯誤產(chǎn)生的情況主要有:

(1)訪問不存在的內(nèi)存地址;
(2)訪問系統(tǒng)保護的內(nèi)存地址;
(3)數(shù)組訪問越界等。

core dumped又叫核心轉(zhuǎn)儲, 當程序運行過程中發(fā)生異常, 程序異常退出時, 由操作系統(tǒng)把程序當前的內(nèi)存狀況存儲在一個core文件中, 叫core dumped。

core意指core memory,用線圈做的內(nèi)存。如今 ,半導(dǎo)體工業(yè)澎勃發(fā)展,已經(jīng)沒有人用 core memory 了,不過,在許多情況下,人們還是把記憶體叫作 core 。

2.控制core文件是否生成

(1)使用ulimit -c命令可查看core文件的生成開關(guān)。若結(jié)果為0,則表示關(guān)閉了此功能,不會生成core文件。

(2)使用ulimit -c filesize命令,可以限制core文件的大小(filesize的單位為KB)。如果生成的信息超過此大小,將會被裁剪,最終生成一個不完整的core文件。在調(diào)試此core文 件的時候,gdb會提示錯誤。比如:ulimit -c 1024。

(3)使用ulimit -c unlimited,則表示core文件的大小不受限制。

在終端通過命令ulimit -c unlimited只是臨時修改,重啟后無效 ,要想永久修改有三種方式:

(1)在/etc/rc.local 中增加一行 ulimit -c unlimited

(2)在/etc/profile 中增加一行 ulimit -c unlimited

(3)在/etc/security/limits.conf最后增加如下兩行記錄:

@root soft core unlimited
@root hard core unlimited

3.core文件的名稱和生成路徑

core默認的文件名稱是core.pid,pid指的是產(chǎn)生段錯誤的程序的進程號。
默認路徑是產(chǎn)生段錯誤的程序的當前目錄。

如果想修改core文件的名稱和生成路徑,相關(guān)的配置文件為:
/proc/sys/kernel/core_uses_pid:控制產(chǎn)生的core文件的文件名中是否添加pid作為擴展,如果添加則文件內(nèi)容為1,否則為0。

/proc/sys/kernel/core_pattern:可以設(shè)置格式化的core文件保存的位置和文件名,比如原來文件內(nèi)容是core-%e。
可以這樣修改:
echo “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern
將會控制所產(chǎn)生的core文件會存放到/corefile目錄下,產(chǎn)生的文件名為:core-命令名-pid-時間戳。

以下是參數(shù)列表:

%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 coredump into the filename 添加導(dǎo)致產(chǎn)生core的信號
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成時的unix時間
%h - insert hostname where the coredump happened into filename 添加主機名
%e - insert coredumping executable name into filename 添加命令名。

一般情況下,無需修改,按照默認的方式即可。

4.gdb調(diào)試core文件的步驟

使用gdb調(diào)試core文件來查找程序中出現(xiàn)段錯誤的位置時,要注意的是可執(zhí)行程序在編譯的時候需要加上-g編譯命令選項。

gdb調(diào)試core文件的步驟常見的有如下幾種,推薦第一種。

具體步驟一:

(1)啟動gdb,進入core文件,命令格式:gdb [exec file] [core file]。
用法示例:gdb ./test test.core。

(2)在進入gdb后,查找段錯誤位置:where或者bt

用法示例:

可以定位到源程序中具體文件的具體位置,出現(xiàn)了段錯誤。

具體步驟二:

(1)啟動gdb,進入core文件,命令格式:gdb –core=[core file]。
用法示例:gdb –core=test.core。

(2)在進入gdb后,指定core文件對應(yīng)的符號表,命令格式:file [exec file] .
用法示例:

具體步驟三:

(1)啟動gdb,進入core文件,命令格式:gdb -c [core file]。
用法示例:gdb -core test.core。
(2)其它步驟同步驟二。

5.其它查找段錯誤位置的方法

可以使用gdb進行單步調(diào)試,來查找段錯誤出錯的位置。gdb的用例具體見:
Linux下gdb用法簡單介紹。

以上就是Linux下如何使用gdb調(diào)試core文件的詳細內(nèi)容,更多關(guān)于Linux gdb調(diào)試core文件的資料請關(guān)注本站其它相關(guān)文章!

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部