1.Segmentation fault这个字符串在shell中是谁打印的?
这个字符串实际上是bash(或者别的shell)打印的,而不是当前出错的进程,也不是内核,参见bash源代码的WAITPID (-1, &status, 0))语句。因此如果在一个自己写的程序中不对子进程进程任何wait或者不捕捉子进程退出信号的话,即使是段错误也不会打印信息,正如下面的程序一样,程序将默默终止:
int main(int argc, char **argv)
{
if (fork() == 0){
int *ad = (int *)0;
*ad = 1234;
}
}
linux中内核或者标准库连这么严重的段错误都不处理,足以看出其机制和策略分离的特性,用户可以自己处理,然后如果父进程感兴趣的话就通知父进程处理,反正内核和底层库是不管的,如果进程本身不处理,那么进行默认处理,而这个默认处理就是退出出错进程,然后父进程如果想做点什么,它可以wait退出进程,然后从status中得到信息。
2.段错误信号是可以被捕获的,一旦捕获了,那么行为就可能是任意的,只有编写捕获钩子的家伙知道。
3.段错误的调试方法:产生core文件,然后gdb proname corename,输入where/bt
4.段错误有时很有用:如果你不明白backtrace和backtrace_symbols函数,在一个很大的代码中你怎么知道某一个函数在特定参数的情况下被什么地方调用,比如有一个函数:
void test(char *name, char *value, ...)
{
...
}
你不知道当name是"abc"的时候,什么地方调用了test,完全可以这样:
void test(char *name, char *value, ...)
{
if (!strcmp(name, "abc")) {
int *a = (int *)0;
*a = 1234;
}
...
}
然后用gdb调试core文件即可。
5.有的时候段错误很奇怪,很有可能是编译问题,比如是头文件的版本不对或者连接库不对导致的二进制不兼容引起的,将头文件整理好,库匹配正确之后,重新干净的编译。
转:http://blog.csdn.net/dog250/article/details/5735520
分享到:
相关推荐
Linux下的段错误Segmentationfault产生的原因及调试方法经典.pdf
linux开发经常会发生Segmentation fault问题,这是网上看到的一篇博文,共享给大家;有需要的下载。
本文简单介绍了Segmentation fault发生的原因,结合实际例子描述了内核向用户态程序发送SIGSEGV信号的流程。文中以实例回答了常见的一些SIGSEGV问题,例如“为什么函数返回了栈还可以访问?”、“为什么free()后的...
背景最近一段时间在linux下用C做一些学习和开发,但是由于经验足,问题多多。而段错误就是让我非常头痛的一个问题。过,目前写一个一千左右的代码,也很少出现段错误
讲述一下linux环境下的编译段错误分析
collect2: fatal error: ld terminated with signal 11 [Segmentation fault], core dumped g++/gcc都不能编译了,一直抱ld的问题。网上找了很多方法都不行,弄了好久终于搞定了
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统...
Linux下的C程序常常会因为内存访问错误等原因造成segment fault(段错误),此时如果系统core dump功能是打开的,那么将会有内存映像转储到硬盘上来,之后可以用gdb对core文件进行分析,还原系统发生段错误时刻的堆栈...
此文档将可能出现的Linux下的段错误产生的原因及调试方法罗列详尽
声明部分:unsigned char *chptr ;%s格式控制部分:{...}仔细看看,发现了这样一个问题,在打印字符串的时候,实际上是打印某个地址开始的所
HLS进行c simulation没有hls-opencv.h的文件,出现Segmentation fault
Segmentation_fault_in_linux[汇编].pdf
主要用于sybase ase 初次安装的安装配置手册
qt-sdk-linux-x86-opensource-2009.03.bin.part5 ||QT开发SDK
下载压缩包,解压缩后,将里面的三个so文件复制到对应的EasyConnect的安装目录,然后重新启动EasyConnect软件
段错误, 这个现象太离奇了。在系统日志里message中一开始提示为python库的问题,后台有提示过libmysqlclient, 也提示过cjson库引起的。 如果真是在特定硬件环境中python或mysql库会出现问题,那有点说不过去。如果...
Hacko-10-SegmentationFault贡献者 :sparkles: 感谢这些很棒的人(): 该项目遵循规范。 欢迎任何形式的捐助!
sybase 12.5 & 15.5 for linux安装配置,sybase15.5-for-linux红帽安装配置
Ubuntu下安装微信,下载安装包,通过执行 ./electronic-wechat 启动