linux环境下调试嵌入式设备时出现Aborted、segmentation fault、卡死的问题以及关于指针使用的一点想法
2013-03-25 11:57
846 查看
linux环境下调试一些嵌入式设备时出现Aborted、segmentation fault、卡死的问题,这些问题可能的原因为:
1、Aborted的问题,例如:
# ./logUtils0322
[UnitTest.cpp]:will init log
[cfgfile.cpp]: logfile open suc
[LogUtils.cpp]:NOTICE OPen configue file SUC
[LogUtils.cpp]:NOTICE suc OpenLogFile()
[LogUtils.cpp]:NOTICE suc Log_Init()
Aborted
这个问题是由于访问内存错误造成的,例如一次时因为循环越界,导致访问界外内存时出现过此种问题。
2、程序卡死的问题,就是程序的进程还在,但是却卡在那里什么都不做,该问题可能也是内存访问越界造成的;另外还可能是多线程中混合使用C和C++的函数造成,例如:某些嵌入式linux平台对C++支持的不好,这时候如果在多线程中混合使用printf和cout,就会造成此问题
3、segmentation fault的问题也是访问非法内存造成的。
造成上述问题的主要原因就是内存操作引起的,因此在开发过程中,使用指针一定特别留心;
1、申请指针变量时一定将其赋值为NULL;
例如:
Itest* pTest = NULL;
pTest = GetInstance();
2、使用指针之前一定先判断有效性;
例如:
if(NULL != pTest)
pTest->Display();
3、避免重复释放,在释放内存之前一定先判断是否已经为空;
4、释放内存之后一定将指针赋值为NULL;
例如:
if(NULL != pTest)
{
delete pTest;
pTest = NULL;
}
开发过程中,多费点事多写两行必要的代码,会在关键时候帮很大的忙。
1、Aborted的问题,例如:
# ./logUtils0322
[UnitTest.cpp]:will init log
[cfgfile.cpp]: logfile open suc
[LogUtils.cpp]:NOTICE OPen configue file SUC
[LogUtils.cpp]:NOTICE suc OpenLogFile()
[LogUtils.cpp]:NOTICE suc Log_Init()
Aborted
这个问题是由于访问内存错误造成的,例如一次时因为循环越界,导致访问界外内存时出现过此种问题。
2、程序卡死的问题,就是程序的进程还在,但是却卡在那里什么都不做,该问题可能也是内存访问越界造成的;另外还可能是多线程中混合使用C和C++的函数造成,例如:某些嵌入式linux平台对C++支持的不好,这时候如果在多线程中混合使用printf和cout,就会造成此问题
3、segmentation fault的问题也是访问非法内存造成的。
造成上述问题的主要原因就是内存操作引起的,因此在开发过程中,使用指针一定特别留心;
1、申请指针变量时一定将其赋值为NULL;
例如:
Itest* pTest = NULL;
pTest = GetInstance();
2、使用指针之前一定先判断有效性;
例如:
if(NULL != pTest)
pTest->Display();
3、避免重复释放,在释放内存之前一定先判断是否已经为空;
4、释放内存之后一定将指针赋值为NULL;
例如:
if(NULL != pTest)
{
delete pTest;
pTest = NULL;
}
开发过程中,多费点事多写两行必要的代码,会在关键时候帮很大的忙。
相关文章推荐
- linux环境下调试一些嵌入式设备时出现Aborted、segmentation fault、卡死的问题
- 关于vim的一些使用以及Dos文件到Linux、Mac下问题
- Linux环境下段错误的产生原因及调试方法小结 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是
- 关于Ble通信库BluetoothKit的使用 以及可能出现的问题分析
- 关于嵌入式设备使用 Android 或者 Linux 的一些讨论
- 嵌入式linux下tftp的建立以及出现的问题
- linux环境下的mysql,httpd以及与宿主机的调试问题总结
- 嵌入式 linux以及arm平台上网络设备测试工具iperf交叉编译以及使用
- VMware 下的linux,使用dbca创建数据库时出现关于jvm的问题
- linux环境下c++的编写、调试以及makefile多文件连编需要注意的问题
- 关于Vs 2005 中出现编译通过,但运行时出现“未使用调试信息生成二进制文件”的问题
- mini2440插入usb设备出现: unable to enumerate USB device on port问题的解决,以及使用super vivi对nand flash进行分区
- 在EVC4 + SMARTPHONE 2003环境中使用设备进行调试报错问题。
- 关于linux应用程序向嵌入式设备上移植的问题
- 关于Java设置环境变量后的调试出现问题的解决方案
- 关于SpringMVC4使用过程中的路径问题,我们经常遇到的Controller未执行以及执行了之后出现404
- 关于linux下tomcat启动出现cannot find ./catalina.sh以及cannot find setclasspath问题的解决办法
- 关于Linux环境下使用Basler GigE相机的一些问题
- Android开发,关于依赖库和JAR包的区别以及使用多个依赖库可能出现的问题(SlidingMenu、SwipeBackLib)
- 使用和众达仿真器CCS3.3.8环境调试出现tconf.exe不能工作问题解决方法