core文件调试步骤——直接定位段错误堆栈
1、ulimit -c unlimited设置core文件无限制
2、echo “/root/core” > /proc/sys/kernel/core_pattern制定core文件生成的路径,注意路径后要加上core
3、在本地执行自己的二进制文件,使之产生段错误,会在之前设置的路径下生成一个core.93919(后面数字随机)文件
4、gdb ./二进制文件 core.93919会进入调试阶段,之后使用bt,就可以输出段错误的地方了,指示的很明确
第4步或者使用gdb --core=core.93919进入gdb调试,再输入file 可执行文件告诉gdb哪个可执行文件,再bt也能显示出段错误的地方
gdb调试的具体方法:
l 1 显示第一行以下的n行,(如果是上面的情况直接输入l就好了),之后如果一直回车的话会一直有源程序显示出来。之后设置断点,break 33在33行设置断点,再输入r,让程序运行起来,他会运行到断点结束,之后你输入n,一步一步执行,p命令能打印出你的变量。
gdb常规命令:
b 断点
L 显示 L 20 显示20行
p 打印
n 单步
r 运行
step 进函数
until 结束本循环
info locals 所有局部变量的值
info args 当前函数参数
info frame 当前栈信息
info thread 显示线程
thread 2 切换到2工作线程
bt 显示堆栈
frame 1 显示某一堆栈
gdb加参数
例如一个程序名为prog 参数为 -a b -c d
运行gdb prog进入调试界面之后输入参数
set args -a b -c d回车就好了