由于项目前期的调试错误比较多,或者有某些隐藏危险:例如内存泄漏;偶尔才出现一次,如果没有捕捉错误的手段可能好不容易出现的机会就溜走了,所以生成core文件是必要的,发生段错误会生成相应的core文件,使用gdb可以查询错误原因和堆栈情况。
生成core文件
那么如何在程序发生段错误时生成core文件呢?可以写一个脚本run.sh,脚本内容如下:
#!/bin/sh #启用核心转储功能,将核心转储大小的软限制设置为无限制。前提是文件系统没有禁用该功能 ulimit -c unlimited #下面这两行都能设置生成core文件的名字及路径,使用任意一行即可;生成core文件的路径(/mmc_data/core)必须可写,最好chmod 777 /mmc_data/core -R #默认是在当前目录想生成名为core的文件 #echo "/mmc_data/core/coremat" > /proc/sys/kernel/core_pattern core_pattern="/mmc_data/core/test_core" #执行你要运行的程序 ./test
每次使用脚本run.sh运行程序,当程序发生错误时即可在/mmc_data/core/目录下生成test_core文件。
生成不同名字的core文件
有时候在系统中运行不止一个程序,为了防止不同程序产生的core文件互相覆盖就需要针对不同的程序生成不同的core文件,具体方法如下:
ulimit -c unlimited #当然,如果你想每次出错都生成不同名字的core文件可以进行如下设置:core文件的名称将包含可执行文件名、进程 ID 和生成时间戳的信息。 #下行命令也可以实现让多个程序发生错误时生成不同名字的core文件,方便调试 sysctl -w kernel.core_pattern="/mmc_data/meta8k/core/core-%e-%p-%t" : ' 占位符介绍,可根据自己的需求使用: %e:可执行文件的名称 %p:进程的 ID %h:主机名 %s:信号名称 %t:时间戳 %u:用户名 %g:组名 ' ./test
然后使用gdb工具分析即可:
#执行如下命令进入gdb分析 gdb test test_core #进入之后执行bt即可看到错误位置及错误原因 bt
注意:编译test程序时必须使用-g参数,不然不能使用gdb工具,关于gdb的更多用法参考的的另一篇博客。
关闭core文件生成
如果想要关闭core文件的生成执行以下命令:
#核心转储大小的软限制设置为0 ulimit -c 0 #清空配置文件 echo "" > /proc/sys/kernel/core_pattern #注意:如果是清空配置文件,需要再设置配置文件才能再生成core:echo "/mmc_data/core/coremat" > /proc/sys/kernel/core_pattern
想要了解更多linux及音视频信息,关注我后续更新!
标签:core,文件,生成,调试,test,data,mmc From: https://www.cnblogs.com/yhfs/p/17901232.html