一、错误代号
一般出现core会由以下几种类型的错误触发生成:
1. SIGSEGV 段错误(信号11),说白了就是访问了非法内存地址,无论是超出进程范围的(地址越界)还是系统不存在的内存访问(指针指向空)
二、环境查看
查看堆栈信息:
1. backstrace, 简写bt :打印当前的函数调用栈的所有信息
2. frame[n], 简写f :切换到堆栈的第N层
3. up/down, 在堆栈中向上或者向下移动
4. info
一般出现core会由以下几种类型的错误触发生成:
1. SIGSEGV 段错误(信号11),说白了就是访问了非法内存地址,无论是超出进程范围的(地址越界)还是系统不存在的内存访问(指针指向空)
2. SIGABRT 检测异常(信号6) 调用了abort()函数导致,最常见的是对释放的内存(free())再次进行释放,或者内存分配失败等原因的时候会触发
3. SIGBUS本意是指总线错误(信号7),一般出现在当你访问一段非法地址,并且这段地址物理上是不存在的。它类似于SIGSEGV,后者也是访问非法地址,但是这个地址是 虚拟地址空间的地址,SIGBUS正好相反,由于某些机器上,物理空间存在不连续的情况,访问到这些hole时,就会产生这个信号。硬件故障。
4. SIGILL 一般是硬件方面的问题,比如用%s格式直接输出string类型的(没有通过c_str()转换)一般会导致这个信号并退出进程(一般编译时就会提示cannot pass objects of non-POD type …call will abort at runtime)。二、环境查看
查看堆栈信息:
1. backstrace, 简写bt :打印当前的函数调用栈的所有信息
2. frame[n], 简写f :切换到堆栈的第N层
3. up/down, 在堆栈中向上或者向下移动
4. info