### 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文件大小 ...
随机推荐
- 第十三章、学习 Shell Scripts 条件判断式
利用 if .... then 单层.简单条件判断式 if [ 条件判断式 ]; then 当条件判断式成立时,可以进行的命令工作内容: fi <==将 if 反过来写,就成为 fi !结束 i ...
- JBOss 端口没占用!
打开exlipse ,启动服务器 后,报如下错误:
- C#- 实用的Log4Net日志记录例子
工作中也是要用到日志记录的,LOG4NET在这块做的不错,以后可以继续拿来用. 1.引用DLL 2.LOG4NET的配置文件 <?xml version="1.0" enco ...
- 8000401a 错误及解决办法
将web程序部署到服务器上时,偶尔会遇到下面的错误: System.Runtime.InteropServices.COMException (0x8000401A): 检索 COM 类工厂中 CLS ...
- 知方可补不足~SQL数据库用户的克隆,SQL集群的用户同步问题
我们知道在为sqlserver建立功能数据库时,通过会为库再建立一个登陆名,而这个登陆名时,只用来管理这个数据库,这是安全的,正确的.
- PJax在jQuery 3.0无法运行问题修复
PJax在jQuery 3.0无法运行 [现象] 页面报错:Uncaught TypeError: Cannot read property 'push' of undefined [原因] jQue ...
- Dev 等待提示 WaitDialogForm 升级版
本文转载:http://www.cnblogs.com/VincentLuo/archive/2011/12/24/2298916.html 一.Dev的等待提示框 ...
- sudo apt-get install lib32stdc++6
[2014-06-19 12:39:55 - android_marketing_zj] /home/exmyth/package/adt-bundle-linux-x86_64-20140321/s ...
- iBatis调用存储过程以及MySQL创建存储过程
首先是MySQL中创建存储过程的SQL -- 列出全部的存储过程 SHOW PROCEDURE STATUS; -- 查看一个已存在的存储过程的创建语句,假设此存储过程不存在,会提示SQL错误(130 ...
- 【ALearning】第三章 Android基本常见控件
本章主要介绍主要的寻常较多使用的控件,包含TextView.EditView.ImageView.Button等.本章将介绍相关控件基本属性的使用,为以后章节的进阶学习提供基础.案例中引用的Linea ...