【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
一、core文件设置
1、core文件的生成开关和大小限制
(1)使用ulimit -c 查看,若为0,则表示关闭了此功能,不会生成core
(2)ulimit -c filesize 限制core的大小 单位kbyte
ulimit -c unlimited 大小不受限制
2.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 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 添加命令名
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的文件->行.
二、使用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。
此时,在当前目录下就会产生一个名为core_name的coredump文件。下面就可以利用gdb工具来对该coredump文件进行调试了。
三、GDB调试
gdb的调试步骤
1、启动gdb(gdb ./a.out)
2、设置输入参数
(gdb) set args 3
3、打印代码
(gdb)list line(行号)
4、设置断点
(gdb)b 46(行号)
5、运行程序
(gdb)run
6、显示变量
(gdb)display i
(gdb)c (继续运行)
7、修改变量的值
(gdb) set result=9
8、退出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
9、加载文件
启动gdb是没有选择程序名称
可以
(gdb)file test
10、参数默认参数值
(gdb)set args 3
(gdb)show args
11、打印变量名和表达式
(gdb) print var
(gdb) p 2+3
(gdb) p sum(3)
(gdb) p *io (打印结构体的各成员的值)
$9 = {value = 3, result = 6}
(gdb)p $9
12、设置断点
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
13、变量检查
(gdb)whatis *io
(gdb)ptype *io
14、调用路径
backtrace 命令可以打印函数调用的路径、提供向前跟踪的功能
backtrace 打印一个顺序列表,函数从最近到最远的调用过程,包涵调用函数和其中参数,简写bt
在第46行设置断点后打印调用过程
(gdb) bt
15、info
16、多线程
1、先获取线程的id,然后转到改线程进行调试
info thread列出当前进程中的线程号,其中最前面为调试的id
用thread id 进入线程
17、disassemble
(gdb) disassemble sum
18、help
参考:
(1)http://blog.csdn.net/sky_qing/article/details/8548989
(2)http://blog.chinaunix.net/uid-16979052-id-3431343.html
来源:oschina
链接:https://my.oschina.net/u/2294938/blog/672611