一、core分析
1、查看命令:
ulimit -c
启动命令:
ulimit -c ulimited
查看core文件:
gdb -c core.xxx a.out
2、生成core文件的路径在文件/etc/sysctl.conf中
cat /etc/sysctl.conf
sysctl.conf文件中科院设置的格式符号表格。。。
3、启动整个系统的内核转储功能
二、gdb调试
1、使用gdb调试的文件需要使用-g编译
(1)使用makefile编译,加-g
(2)使用configure,./configure CFLAGs = "-wall -o2 -g"
2、gdb调试
(1)启动:gdb a.out
(2)设置断点: break或者b
break 函数名
break 行号
break 文件名:行号
break 文件名:函数名
break +偏移量
break -偏移量
break *地址
通过info break(info b)查看断点情况
3、显示帧栈:backtrace或者bt(别名:info stack, info s, where)
显示所有帧栈:bt
显示开头N个帧栈: bt N
显示最后N个帧栈: bt full N
4、显示变量: print 变量名(或者p 变量名)
5、显示寄存器:info registers(或者info reg)
6、单步执行:next(n) ,进入函数内部执行step(p),逐条执行汇编指令:nexti stepi
7、继续执行:continue(c)
8、监视点:watch 变量,当发生变化时暂停(awatch被访问和改变时暂停,rwatch被访问是暂停)
9、删除断点和监视点:delete n (d n)
10、改变变量的值:set variable <变量>=<表达式>
11、attach到进程: attach 进程ID
attach 之后就能使用普通的gdb命令,需要将gdb和进程分离时使用detach,进程detach之后会继续运行。
12、条件断点:break 断点 if 条件
13、删除禁用断点:clear 文件名:行号
delete 断点编号
disable 断点编号
enable 断点编号
14、断点命令:commands 断点编号
命令
end
15、查看进程线程:i thr
切换到相应的线程:thr 2