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