不想看我啰嗦的,可以直接看第3节总结
1、问题现象:
报错文件1:
~/ch3/build/visualizeGeometry
报错文件2:
~/paper/slambook2-master/ch3/build/examples/plotTrajectory
不止这俩个文件,还有别的
2、我的解决办法
并不一定通用,是偶尔发现的
思路:
首先查段错误核心已转储
是什么意思
。发现段错误
一般是C++内存访问方面的出错,核心已转储
是linux一个工具ulimit提供的一个功能
,在你所执行程序的内存操作存在危险时,ulimit会生成一个core文件来辅助用gdb对程序进行调试。
事实:
我并没找到生成的core文件
,于是我按照这个帖子的方法,在我的终端执行了以下命令
sudo sh -c "ulimit -n 65535 && exec su $LOGNAME"
结果:
很快啊,突然的程序就能执行了。
程序执行效果:
3、操作总结
只需要在终端执行以下操作
首先
#看有没有装这个玩意儿
ulimit -a
#系统返回如下
real-time non-blocking time (microseconds, -R) unlimited
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 78687
max locked memory (kbytes, -l) 2527708
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 78687
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
然后
#设置core文件大小,以便生成core文件
ulimit -c 1024
#这个时候执行会报错的可执行文件,例如visualizeGeometry
./visualizeGeometry
#再
ls
看看可执行文件的当前目录有没有出现core文件,如果没有出现core文件就继续以下操作,否则就到此结束
ulimit -c unlimited
#如果终端显示下面这行就再继续下一步,否则到此结束
bash: ulimit: core file size: 无法修改限制:不允许的操作
sudo ulimit -c unlimited
#如果终端显示下面这行就再继续下一步,否则到此结束
sudo: ulimit:找不到命令
#执行完这一步后,即使运行可执行文件后没有出现core文件,也一样可以解决我的问题了
sudo sh -c "ulimit -n 65535 && exec su $LOGNAME"