### core文件使用
在Linux下程序崩溃,特别是在循环中产生
Segment Fault错误时,根本不知道程序在哪出错,这时,利用core文件可以快速找到出错的问题所在。
#@author:       gr
#@date:         2015-05-27
#@email:        forgerui@gmail.com
一、core文件的产生
有时候程序崩溃并没有产生core文件,这时需要设置core文件大小。
1.1. 查看core文件大小
如果core文件大小为0,就不会产生core文件。
ulimit -a 		#查看所有大小
ulimit -c 		#查看core文件大小
1.2. 设置core文件大小
ulimit -c 1024			#设为1024
ulimit -c unlimited		#设置成不受限制
如果想永久修改大小,可以修改/etc/security/limits.conf,设置如下:
#<domain>      <type>  <item>         <value>
	*         	hard	core		unlimited
1.3. core文件的命名
如果将/proc/kernel/core_uses_pid设置为1,表示添加pid作为扩展名,core文件形式如core.3871。为0,则生成的文件同一命名成core,这样可能会覆盖掉同一文件名。
二、core文件使用
使用gdb可以查看出错时的堆栈信息。
gdb -c core exe(运行文件名)
bt		#查看出错时的堆栈信息
where	#和bt相似
#0  0x00007fef3232a267 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:55
#1  0x00007fef3232beca in __GI_abort () at abort.c:89
#2  0x00007fef32c3e06d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007fef32c3bee6 in () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007fef32c3bf31 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007fef32c3c149 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007fef3411ba5a in cv::error(cv::Exception const&) () from /usr/local/lib/libopencv_core.so.2.4
#7  0x00007fef34218a84 in cv::Mat::Mat(cv::Mat const&, cv::Rect_<int> const&) () from /usr/local/lib/libopencv_core.so.2.4
#8  0x0000000000409adb in cv::Mat::operator() (this=0x7ffd19b49020, roi=...) at /usr/local/include/opencv2/core/mat.hpp:379
#9  0x000000000041372a in EnsembleTracker::drawResult (this=0x1e1af90, frame=..., frameClone=..., scale=1) at tracker.h:107
#10 0x00000000004122ba in TrakerManager::doWork (this=0x7ffd19b49880, frame=..., frame2=...) at multiTrackAssociation.cpp:762
#11 0x0000000000405310 in multiTrack (readerType=0, detectorType=1) at main.cpp:174
#12 0x00000000004059f5 in main (argc=3, argv=0x7ffd19b49bd8) at main.cpp:246
由于程序中使用了opencv,发现在程序出错时报错的信息比较多。我们可以看到在#9之后就是自己的代码,#8之前的代码是其它程序实现的,出错的位置在tracker.h的107行,再根据出错时候的输出信息:
OpenCV Error: Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows) in Mat, file /home/grlab/app/opencv-2.4.9/modules/core/src/matrix.cpp, line 323
terminate called after throwing an instance of 'cv::Exception'
what():  /home/grlab/app/opencv-2.4.9/modules/core/src/matrix.cpp:323: error: (-215) 0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows in function Mat
可知程序的问题应该是没有进行Mat的Rect检查,Rect的位置超越了Mat的大小,只要与Mat的大小相与一下就可以解决了。
rect &= Rect(0, 0, imgMat.cols, imgMat.rows);
Mat roiMat = imgMat(rect);
三、Reference
- http://www.cnblogs.com/li-hao/archive/2011/09/25/2190278.html
 - http://blog.sina.com.cn/s/blog_537f4d9b0100wi88.html
 - http://www.cnblogs.com/dongzhiquan/archive/2012/01/20/2328355.html
 
### core文件使用的更多相关文章
- core文件
		
1.ulimit -c查看是否可以产生core文件 打印0表示当前不产生core文件 2.ulimit -c unlimited 设置产生core文件 这种方法只是临时设置产生core文件 3.ec ...
 - Core文件作用、设置及用法
		
http://blog.csdn.net/lanmolei814/article/details/45201693 ====================================== 1.C ...
 - jexus防止产生 *.core文件
		
1. jexus防止产生 *.core文件 # vi jws 新增: ulimit -c 0 >/dev/null 2>&1 2.删除*.core # sudo rm -rf *. ...
 - 开发板上使用core文件调试
		
转载:http://www.nginx.cn/1521.html 如果开发板的操作系统也是linux,core调试方法依然适用.如果开发板上不支持gdb,可将开发板的环境(依赖库).可执行文件和cor ...
 - 让linux中的程序崩溃时生成core文件
		
当我们的linux程序崩溃的时候,常常会有这样的提示: Segmentation fault (core dumped) 段错误 (核心已转储) 提示说生成了core文件,但是此功能 ...
 - Linux中如何产生core文件?
		
在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息).使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数. 1.core文件 ...
 - Linux core 文件介绍
		
Linux core 文件介绍 http://www.cnblogs.com/dongzhiquan/archive/2012/01/20/2328355.html 1. core文件的简单介绍在一个 ...
 - linux包之gdb之gdb命令与core文件产生
		
gdb-7.2-64.el6_5.2.x86_64/usr/bin/gcore/usr/bin/gdb/usr/bin/gdb-add-index/usr/bin/gdbtui/usr/bin/gst ...
 - gdb简单调试~core文件
		
1.打开终端,进入项目目录,输入ulimit -a ,可以看core文件大小设置(第一行),若为0, 则没有打开core dump设置. 2.ulimit -c unlimited ,core文件大小 ...
 
随机推荐
- php做EXCEL数据导出导入开发的一些小问题
			
前两天刚刚做开发CRM系统项目,在做要做EXCEL导出导入功能,因为以前做.NET开发用的是NPOI,但可是没找到PHP版本的,所以就网搜找了个国外的开源PHPEXCEL , 一开始只是做了简单的导入 ...
 - ASP.NET线程与异步
			
什么是线程? 线程简单来说就是一种数据结构,用来管理这个程序的执行状态,其中包括 1.线程核心对象->寄存器的状态 2.线程环境块,是一块用户模式下的内存,包含线程的异常处理链的头部.线程的局部 ...
 - hadoop 1.2 集群搭建与环境配置
			
一.虚拟机环境 见我的另一篇博客http://www.cnblogs.com/xckk/p/6000881.html, 需要安装JDK环境,centos下安装JDK可参考: http://www.ce ...
 - 关于cshtml中的js对动态编译支持的问题
			
问题:MVC4中支持对ViewBag.ViewDate等的动态编译,但是在js中对它的支持就是有问题.虽然是可以动态编译,但是动态编译之后,断点无法获取. $.getJSON("/api/A ...
 - nginx,FastCGI启动语句
			
/etc/init.d/nginx restart spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi
 - [AngularJS + cryptoJS + Gravatar] Provider vs factory
			
Configurable Bits Need a Provider We want to be able to configure the characterLength before Tweetab ...
 - iOS开发——UI篇OC篇&UIStackView详解
			
UIStackView详解 一.继承关系.遵守协议.隶属框架及可用平台 UIStackView 类提供了一个高效的接口用于平铺一行或一列的视图组合.Stack视图使你依靠自动布局的能力,创建用户接口使 ...
 - Java Web services: WS-Security with Metro--referenc
			
As you know from "Introducing Metro," the reference implementations of the JAXB 2.x data-b ...
 - Helpers\Date
			
Helpers\Date The Date helper is used for calculations with dates. Date::difference($from, $to, $type ...
 - FBReaderJ 编译Jni
			
最近要做一个电子书项目用到FBReaderJ 第一步,也是最难的一步,要编译他的Jni 文件,对于android开发还是小白的我,只能说难!好难!非常难!,于是乎百度了一下,找到几篇有价值性的文章 第 ...