linux中的core调试

转载 2007年09月19日 18:20:00
 $ uname -a
Linux dev 2.4.21-9.30AXsmp #1 SMP Wed May 26 23:37:09 EDT 2004 i686 i686 i386 GNU/Linux

再看看默认的一些参数,注意core file size是个0,程序出错时不会产生core文件了。

$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) 4
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 7168
virtual memory (kbytes, -v) unlimited

$ ulimit -c 1024

gdb --core=core.9128
GNU gdb Asianux (6.0post-0.20040223.17.1AX)
Copyright 2004 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-asianux-linux-gnu".
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x08048373 in ?? ()
(gdb) bt
#0 0x08048373 in ?? ()
#1 0xbfffd8f8 in ?? ()
#2 0x0804839e in ?? ()
#3 0xb74cc6b3 in ?? ()
#4 0x00000000 in ?? ()

此时用bt看不到backtrace,也就是调用堆栈,原来GDB还不知道符号信息在哪里。我们告诉它一下:

(gdb) file ./a.out
Reading symbols from ./a.out...done.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) bt
#0 0x08048373 in sub () at foo.c:17
#1 0x08048359 in main () at foo.c:8


此时backtrace出来了。

(gdb) l
8         sub();
9         return 0;
10     }
11
12     static void sub(void)
13     {
14         int *p = NULL;
15
16         /* derefernce a null pointer, expect core dump. */
17         printf("%d", *p);
(gdb)

(gdb)r ---- 运行

linux下调试core文件
gdb <progname> <core>
<progname>:出错产生core dump的可执行程序。
<core>: core dump的文件名,缺省是“core”

linux core文件调试

在完成公司项目,测试进程的时候,经常会发现日志到了某一段特定的代码的时候就没了,进程直接退出,也没有捕获到任何的异常信息,如果日志打印的较多还可能比较容易发现问题,如果日志较少,就很难进行进一步的查错...

linux-编译gcc调试gdb与安装make与core

1,工具gcc:编译C文件 单文件编译 $gcc -c hello.c #只编译不链接,生成hello.o $gcc -o hello hello.o #输出可执行文件hello...

linux下gdb调试解决core dumped问题

最近因为忙于期末考试,前面学习过程中遇到的问题一直没有总结,现在考试考完了,终于有时间搞自己的事情,开兴ing.今天把自己写代码遇到的问题总结一下! 之前在学习C语言编程操作sqlite3数据库遇到了...

linux下调试core的命令,察看堆栈状态命令

在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。   首先看看...
  • ice1224
  • ice1224
  • 2013年06月07日 01:31
  • 473

c/c++基础(二十七) Linux下core文件调试方法

在程序开发中,我们常常用多种方法来定位程序的异常退出,如:打印日志,gdb core等. 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息...

Linux程序崩溃调试手段--core使用(续)

core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIG...
  • lisayh
  • lisayh
  • 2017年07月05日 13:34
  • 264

linux下的代码错误调试技能-core dump

上篇文章说到valgrind可以打印出程序出错的信息,redis的backtrack机制也可以实现。 关于valgrind的一个好的文章:https://www.ibm.com/developerw...

linux下线程调试 ulimit core

在linux 下写线程程序的同学估计都遇到过找bug找到崩溃的情况,多线程情况下bug的追踪实在是不容易。现在我来介绍一个好用的方法 ulimit core。 先简单介绍一下ulimit是个什么(你也...

gdb用法(二) 在Linux下产生并调试core文件

分析核心(core)文件   在程序发生崩溃时,有时可能无法直接运行GDB来进行调试。比如程序可能是在另外一台机器上运行的,或者因为程序对时间比较敏感,所以手动跟踪调试会产生无法接受的延迟等...

【Linux】学会 core dump 事后调试 快速定位段错误

环境: centos 6.5 core dump是什么其实就是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件。最常见的就是段错误,然后程序...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux中的core调试
举报原因:
原因补充:

(最多只允许输入30个字)