在Linux下编译时出现段错误应该怎么调试
2018-01-08 19:56
155 查看
在产生段错误的时候 采用一般的方法调试是很难发现的
一、先看几个段错误实例
(1)
这是因为指针没有开任何内存空间,所以这个0没有地方去,就会产生段错误
(2)
这个比较简单,0地址是受保护的地址,是系统自己要用的。
(3)
这个一看不太好看,这是因为test是一个字符串常量,他是静态内存里面的,但是通过mallow和new产生的指针申请的空间是动态的,当我们把静态内存放到动态上的时候就会报错。
(4)还有一个很常见的错误,就是c语言在输入的时候scanf("%d",a);会发现取地址符号&没加,也会产生段错误
二、调试段错误
要使用ulimit -c 1024来调试,这是企业常用的方法,-c就是开辟1024字节大小的空间来专门存段错误的信息。
开始我写了一个错误的代码
这时候运行ulimit命令,然后生成dbug文件
然后运行dbug文件,发现提示段错误,并且生成了一个文件
然后对这个段错误提示文件进行调试
就可以看出在第几行有错误,这张图不是上面代码的,,,
一、先看几个段错误实例
(1)
这是因为指针没有开任何内存空间,所以这个0没有地方去,就会产生段错误
(2)
这个比较简单,0地址是受保护的地址,是系统自己要用的。
(3)
这个一看不太好看,这是因为test是一个字符串常量,他是静态内存里面的,但是通过mallow和new产生的指针申请的空间是动态的,当我们把静态内存放到动态上的时候就会报错。
(4)还有一个很常见的错误,就是c语言在输入的时候scanf("%d",a);会发现取地址符号&没加,也会产生段错误
二、调试段错误
要使用ulimit -c 1024来调试,这是企业常用的方法,-c就是开辟1024字节大小的空间来专门存段错误的信息。
开始我写了一个错误的代码
这时候运行ulimit命令,然后生成dbug文件
然后运行dbug文件,发现提示段错误,并且生成了一个文件
然后对这个段错误提示文件进行调试
就可以看出在第几行有错误,这张图不是上面代码的,,,
相关文章推荐
- linux一个c文件要引用另一个c文件中的函数编译的时候,应该怎么编译?
- linux——编译安装nginx出现报错,以及启动nginx服务时80端口被占用怎么解决?
- 在Linux中编译文件是出现 Your intltool is too old. You need intltool 0.35.0 or later的问题怎么解决
- 关于Visual stduio安装后出现了“出现了运行时间错误。是否要进行调试?”对话框,应该怎么办
- linux下出现段错误怎么排错
- linux只想部分修改内核应该怎么办,是不是要重新编译?
- c++求教:我在linux下用CodeLite编译调试时出现&"warning: GDB: Failed to set controlling terminal: Operation not permitted/n"
- Linux下程序出现段错误的调试解决方法
- linux下出现段错误怎么排错
- VS2017 远程调试linux出现的错误:Cannot access memory at address 0x570
- linux 解决Ubuntu编译内核uImage出现问题“mkimage” command not found - U-Boot images will not be built问题
- linux环境下调试嵌入式设备时出现Aborted、segmentation fault、卡死的问题以及关于指针使用的一点想法
- [解决问题]asp.net程序编译调试时偶尔出现访问被拒绝的错误
- 在linux中如何编译C程序,使之成为可执行文件?如何调试?
- linux下编译、运行、调试java程序
- linux下编译出现 "警告:隐式声明与内建函数'exit'不兼容" 的解决方法
- LInux 2.6 编译内核出现Question
- 怎么在linux下makefile文件中添加调试选项
- 编译linux下的CVM出现的错误"_libc_wait"的解决
- linux环境下vscode 中C/C++编译及调试环境的搭建