| « | October 2025 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | |
| 公告 |
|
不知不觉6年了
|
| Blog信息 |
|
blog名称:〾堯仸〾的天空 日志总数:139 评论数量:503 留言数量:16 访问次数:2722375 建立时间:2005年4月23日 |

| |
|
[资料]在Linux下产生并调试core文件 文章收藏
〾堯仸〾 发表于 2007/2/21 20:33:22 |
|
转载自: http://blog.china-pub.com/more.asp?name=uniware&id=35478
先看看我用的是个什么机器:
$ uname -aLinux 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 -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedfile size (blocks, -f) unlimitedmax locked memory (kbytes, -l) 4max memory size (kbytes, -m) unlimitedopen files (-n) 2048pipe size (512 bytes, -p) 8stack size (kbytes, -s) 10240cpu time (seconds, -t) unlimitedmax user processes (-u) 7168virtual memory (kbytes, -v) unlimited
写个简单的程序,看看core文件是不是会被产生。
$ more foo.c
#include
static void sub(void);
int main(void){ sub(); return 0;}
static void sub(void){ int *p = NULL;
/* derefernce a null pointer, expect core dump. */ printf("%d", *p);}
$ gcc -Wall -g foo.c$ ./a.outSegmentation fault
$ ls -l core.*ls: core.*: No such file or directory
没有找到core文件,我们改改ulimit的设置,让它产生。1024是随便取的,要是core文件大于1024个块,就产生不出来了。
$ ulimit -c 1024
$ ulimit -acore file size (blocks, -c) 1024data seg size (kbytes, -d) unlimitedfile size (blocks, -f) unlimitedmax locked memory (kbytes, -l) 4max memory size (kbytes, -m) unlimitedopen files (-n) 2048pipe size (512 bytes, -p) 8stack size (kbytes, -s) 10240cpu time (seconds, -t) unlimitedmax user processes (-u) 7168virtual memory (kbytes, -v) unlimited
$ ./a.outSegmentation fault (core dumped)$ ls -l core.*-rw------- 1 uniware uniware 53248 Jun 30 17:10 core.9128
注意看上述的输出信息,多了个(core dumped)。确实产生了一个core文件,9128是该进程的PID。我们用GDB来看看这个core。
$ gdb --core=core.9128GNU 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 arewelcome 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.outReading 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) l8 sub();9 return 0;10 }1112 static void sub(void)13 {14 int *p = NULL;1516 /* derefernce a null pointer, expect core dump. */17 printf("%d", *p);(gdb) |
|
|
回复:在Linux下产生并调试core文件 文章收藏
fdsf(游客)发表评论于2010/5/7 11:06:10 |
|
[url=http://www.bj.com]北京[/url]<A HREF=http://www.bj.com TARGET=blank>北京</A> |
|
|
回复:在Linux下产生并调试core文件 文章收藏
HH(游客)发表评论于2009/8/4 11:52:39 |
|
|
回复:在Linux下产生并调试core文件 文章收藏
CARAOO(游客)发表评论于2007/12/7 15:58:10 |
| » 1 »
|