ubuntu核心错误解决方案
- 问题介绍
在使用ubuntu的过程中,为了给vim编辑器配置编辑插件,自python官网下载了python3.6进行配置。
但是在配置过程中,运行pip时发生了“段错误(核心已转储)”,以下是解决实践。
- 什么是段错误
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIGSEGV信号,然后就会core dump)。产生段错误的原因大致上有三类:访问不存在的内存地址、访问系统保护的内存地址和访问只读的内存地址。
-
解决步骤
-
设置core文件大小限制
-
使用
ulimit -a命令查看core文件大小限制1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16core file size (blocks, -c) unlimited //这里是core文件的大小限制
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 60348
max locked memory (kbytes, -l) 1940728
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) 60348
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited -
使用如果为
0,使用ulimit -c unlimited取消限制
-
-
core文件的生成地址
-
通常情况下core文件的生成地址为报错程序的目录下,但是在
ubuntu中core文件的生成路径有所变化-
使用
cat /proc/sys/kernel/core_pattern查看文件生成目录1
|/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E //返回的路径
-
但是在这个路径下我们找不到core文件,主要是因为
ubuntu官方的apport.service服务,自动生成崩溃报告。 -
因此,我们需要先关闭服务,修改生成地址以便寻找文件
1
2
3
4
5
6
7
8//启用错误报告服务
sudo systemctl enable apport.service
//or
sudo service apport start
//关闭错误报告服务
sudo systemctl disable apport.service
//or
sudo service apport stop -
设置路径
echo "/home/boy/corefile/core-%e-%p-%t"> /proc/sys/kernel/core_pattern -
再次运行即可在设定的corefile文件夹内看见生成的core文件
-
-
-
使用GDB进行测试
-
