用core dump来调试程序段错误
来源:互联网 发布:linux配置ftp服务器 编辑:程序博客网 时间:2024/06/06 01:47
有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的.但这不像编译错误一样会提示到文件->行, 而是没有任何信息, 使得我们的调试变得困难起来.
可以设置core文件大小,ulimit -c 1024(kbytes单位)或者ulimit -c unlimited。(注: 使用-c unlimited不限制core文件大小)
2.生成core文件: $ sudo sh -c "ulimit -c unlimited; ./main_arm" # main_arm 是可执行文件名。
3.记得在编译时加上 -g 方便调试,注意不要加上优化选项 -Os(或者-O0 -O1 ....)
4.用gdb查看core文件:
gdb [exec file] [core file]
如:gdb main_arm core
在进入gdb后, 用 bt 或 where 命令查看backtrace以检查发生程序运行到哪里, 来定位core dump的文件行.
5.举例:
一个程序cmm_test_tool在运行的时候发生了错误,并生成了一个core文件,如下: -rw-r–r– 1 root cmm_test_tool.c -rw-r–r– 1 root cmm_test_tool.o -rwxr-xr-x 1 root cmm_test_tool -rw——- 1 root core.19344 -rw——- 1 root core.19351 -rw-r–r– 1 root cmm_test_tool.cfg -rw-r–r– 1 root cmm_test_tool.res -rw-r–r– 1 root cmm_test_tool.log [root@AUTOTEST_SIM2 mam2cm]#就可以利用命令gdb进行查找,参数一是应用程序的名称,参数二是core文件,运行gdb cmm_test_tool core.19344结果如下: [root@AUTOTEST_SIM2 mam2cm]# gdb cmm_test_tool core.19344 GNU gdb Red Hat Linux (5.2.1-4) Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type “show copying” to see the conditions. There is absolutely no warranty for GDB. Type “show warranty” for details. This GDB was configured as “i386-redhat-linux”… Core was generated by `./cmm_test_tool’. Program terminated with signal 11, Segmentation fault. Reading symbols from /lib/i686/libpthread.so.0…done. Loaded symbols for /lib/i686/libpthread.so.0 Reading symbols from /lib/i686/libm.so.6…done. Loaded symbols for /lib/i686/libm.so.6 Reading symbols from /usr/lib/libz.so.1…done. Loaded symbols for /usr/lib/libz.so.1 Reading symbols from /usr/lib/libstdc++.so.5…done. Loaded symbols for /usr/lib/libstdc++.so.5 Reading symbols from /lib/i686/libc.so.6…done. Loaded symbols for /lib/i686/libc.so.6 Reading symbols from /lib/libgcc_s.so.1…done. Loaded symbols for /lib/libgcc_s.so.1 Reading symbols from /lib/ld-linux.so.2…done. Loaded symbols for /lib/ld-linux.so.2 Reading symbols from /lib/libnss_files.so.2…done. Loaded symbols for /lib/libnss_files.so.2 #0 0×4202cec1 in __strtoul_internal () from /lib/i686/libc.so.6 (gdb)进入gdb提示符,输入where,找到错误发生的位置和堆栈,如下: (gdb) where #0 0×4202cec1 in __strtoul_internal () from /lib/i686/libc.so.6 #1 0×4202d4e7 in strtoul () from /lib/i686/libc.so.6 #2 0×0804b4da in GetMaxIDFromDB (get_type=2, max_id=0×806fd20) at cmm_test_tool.c:788 #3 0×0804b9d7 in ConstrctVODProgram (vod_program=0×40345bdc) at cmm_test_tool.c:946 #4 0×0804a2f4 in TVRequestThread (arg=0×0) at cmm_test_tool.c:372 #5 0×40021941 in pthread_start_thread () from /lib/i686/libpthread.so.0 (gdb)至此,可以看出文件出错的位置是函数 GetMaxIDFromDB ,两个参数分别是2和0×806fd20,这个函数位于源代码的788行,基于此,我们就可以有针对性的找到问题的根源,并加以解决。
- 用core dump来调试程序段错误
- 用core dump来调试程序段错误
- 学会用core dump调试程序错误
- 学会用core dump调试程序错误
- 学会用core dump调试程序错误
- 学会用core dump调试程序错误
- 学会用core dump调试程序错误
- 学会用core dump调试程序错误
- 学会用core dump调试程序错误
- 学会用core dump调试程序错误
- 学会用core dump调试程序错误
- 学会用core dump调试程序错误
- 段错误调试神器 - Core Dump详解
- 段错误调试神器 - Core Dump详解
- 段错误调试工具-core dump
- [调试]学会用core dump调试程序错误
- 学会用core dump调试程序错误(转)
- 学会用core dump调试程序错误(转)
- 常用网页背景颜色
- ASP.NET2.0实现页面无刷新
- Usaco 1.2.3 命名那个数字(Name That Number)
- 一篇好的SQL语句执行顺序讲解
- wordpress 模板标签----wp_nav_menu使用说明
- 用core dump来调试程序段错误
- top命令详解
- poj 3624 Charm Bracelet
- Android-------对话框中进度条(ProgressDialog)
- HTML标签集
- windows 多线程编程的几点经验 (防止死锁)
- RGB色彩对照表
- Apache 如何使用基础篇
- 领域模型的概念