linux下core文件設置與生成coredump文件

1、core文件設置
一、core文件的生成開關和大小限制
(1)使用ulimit -c 查看,若爲0,則表示關閉了此功能,不會生成core
(2)ulimit -c filesize 限制core的大小 單位kbyte
ulimit -c unlimited 大小不受限制html

2.core文件的名稱和生成路徑
若系統生成的core文件不帶其它任何擴展名稱,則所有命名爲core。新的core文件生成將覆蓋原來的core文件。sass

(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 coredump into the filename 添加致使產生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 添加命令名app

3.用gdb查看core文件:
下面咱們能夠在發生運行時信號引發的錯誤時發生core dump了.
發生core dump以後, 用gdb進行查看core文件的內容, 以定位文件中引起core dump的行.
gdb [exec file] [core file]
如:
gdb ./test test.core
在進入gdb後, 用bt命令查看backtrace以檢查發生程序運行到哪裏, 來定位core dump的文件->行.函數

2、使用GDB生成coredump文件
若是在測試過程當中遇到某個進程的CPU利用率太高或者卡死而須要去調試該進程時,
能夠利用gdb命令生成coredump文件,而後再去調試coredump文件來定位問題。工具

那麼如何使用gdb生成coredump文件呢?其實步驟很簡單:測試

1. 安裝好gdb,而後使用命令 'gdb'。(假設須要調試的進程號爲 21509)
2. 使用 ‘attach 21590’命令將gdb附加到進程21509上。
3. 使用‘gcore core_name’命令生成coredump文件core_name。
4. 使用‘detach’命令斷開鏈接。
5.使用‘q’命令退出gdb。ui

此時,在當前目錄下就會產生一個名爲core_name的coredump文件。下面就能夠利用gdb工具來對該coredump文件進行調試了。spa

3、GDB調試
gdb的調試步驟
一、啓動gdb(gdb ./a.out).net

二、設置輸入參數
(gdb) set args 3

三、打印代碼
(gdb)list line(行號)

四、設置斷點
(gdb)b 46(行號)

五、運行程序
(gdb)run 

六、顯示變量
(gdb)display i
(gdb)c (繼續運行)

七、修改變量的值
(gdb) set result=9

八、退出gdb
(gdb) q

gdb經常使用命令
list  list[開始,結束]    列出文件的代碼清單 l
print   print p   打印變量的內容  p
break  break[行號|函數名] 設置斷點   b
continue continue[開始,結束] 繼續運行   c
info  info pass  列出信息   i
next  next   下一行   n
setp  setp   進入函數   S
display  dispaly pass   顯示參數  
file  file path  加載文件 
run  run args  運行程序   r

九、加載文件
啓動gdb是沒有選擇程序名稱
能夠
(gdb)file test

十、參數默認參數值
(gdb)set args 3
(gdb)show args

十一、打印變量名和表達式
(gdb) print var
(gdb) p 2+3
(gdb) p sum(3)
(gdb) p *io (打印結構體的各成員的值)
$9 = {value = 3, result = 6}
(gdb)p $9

十二、設置斷點
break 行號:程序中止在設定的行號以前
break 函數名稱:在設定的函數以前
break 行號或者函數if條件:若是條件爲真。則程序在到達指定行或者函數時中止
(gdb) b ex02-gdb-01.c:46
(gdb) b ex02-gdb-01.c:sum
(gdb) b 46 if i==2
(1)顯示斷點
(gdb) info b
(2)刪除斷點
(gdb) delete b 8 (斷點編號)
(3)禁用斷點
(gdb) disable b 9
(4)啓動斷點
(gdb) enable b 8
(5)清除斷點
clean line
(gdb) clean 9

1三、變量檢查
(gdb)whatis *io
(gdb)ptype *io 

1四、調用路徑
backtrace 命令能夠打印函數調用的路徑、提供向前跟蹤的功能
backtrace 打印一個順序列表,函數從最近到最遠的調用過程,包涵調用函數和其中參數,簡寫bt
在第46行設置斷點後打印調用過程
(gdb) bt

1五、info

1六、多線程
一、先獲取線程的id,而後轉到改線程進行調試
info thread列出當前進程中的線程號,其中最前面爲調試的id
用thread id 進入線程

1七、disassemble
(gdb) disassemble sum 

1八、help

參考:

(1)http://blog.csdn.net/sky_qing/article/details/8548989

(2)http://blog.chinaunix.net/uid-16979052-id-3431343.html

相關文章
相關標籤/搜索