段错误的原因及调试方法

段错误的原因及调试方法

段错误是什么

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

段错误产生原因

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/

猜你喜欢

转载自blog.csdn.net/al86866365/article/details/80859226