段错误的原因及调试方法

段错误的原因及调试方法

段错误是什么

一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,
例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。

段错误产生原因

1.访问不存在的内存地址 (int *ptr = NULL;*ptr = 0;)
2.访问系统保护的内存地址 (int *ptr = (int *)0;*ptr = 100;)
3.访问只读的内存地址
4.栈溢出

辅助信息获取

1.dmesg
    查看发生段错误的程序名称、引起段错误发生的内存地址、指令指针地址、堆栈指针地址、错误代码、错误原因
2.makefile -g参数
    用于gdb调试,显示行号、函数名、传参
3.nm命令(列出二进制文件中的符号表)
    包括符号地址、符号类型、符号名(函数名[.text],变量名[.bss .data])等
4.ldd(PC)、嵌入式用xxx-readelf(实现待定)
    二进制程序的共享链接库依赖,包括库的名称、起始地址

段错误的调试方法

1.使用printf/log(业务流程)
2.使用gcc和gdb(core文件)
3.objdump ldd?

参考

嵌入式 Linux下段错误的原因和调试方式

进程通信:http://www.cnblogs.com/52php/tag/%E8%BF%9B%E7%A8%8B%E9%80%9A%E4%BF%A1/

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值