在 Windows 下我們已經(jīng)習慣了用 Windbg 之類(lèi)的工具調試 dump 文件,從而分析并排除程序運行時(shí)錯誤。在 Linux 下我們同樣可以完成類(lèi)似的工作 —— Core Dump。
$ ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling priority (-e) 20file size (blocks, -f) unlimitedpending signals (-i) 16382max locked memory (kbytes, -l) 64max memory size (kbytes, -m) unlimitedopen files (-n) 1024pipe size (512 bytes, -p) 8POSIX message queues (bytes, -q) 819200real-time priority (-r) 0stack size (kbytes, -s) 8192cpu time (seconds, -t) unlimitedmax user processes (-u) unlimitedvirtual memory (kbytes, -v) unlimitedfile locks (-x) unlimited
$ sudo sh -c "ulimit -c unlimited; ./test" # test 是可執行文件名。
#include <stdio.h>#include <stdlib.h>void test(){ char* s = "abc"; *s = 'x';}int main(int argc, char** argv){ test(); return (EXIT_SUCCESS);}$ sudo sh -c "ulimit -c unlimited; ./test"Segmentation fault (core dumped)
$ ls -ltotal 96-rw------- 1 root root 167936 2010-01-06 13:30 core-rwxr-xr-x 1 yuhen yuhen 9166 2010-01-06 13:16 test
$ sudo gdb test coreGNU gdb (GDB) 7.0-ubuntuCopyright (C) 2009 Free Software Foundation, Inc.Reading symbols from .../dist/Debug/test...done.warning: Can't read pathname for load map: Input/output error.Reading symbols from /lib/tls/i686/cmov/libpthread.so.0... ...done.(no debugging symbols found)...done.Loaded symbols for /lib/tls/i686/cmov/libpthread.so.0Reading symbols from /lib/tls/i686/cmov/libc.so.6... ...done.(no debugging symbols found)...done.Loaded symbols for /lib/tls/i686/cmov/libc.so.6Reading symbols from /lib/ld-linux.so.2... ...done.(no debugging symbols found)...done.Loaded symbols for /lib/ld-linux.so.2Core was generated by `./test'.Program terminated with signal 11, Segmentation fault.#0 0x080483f4 in test () at main.c:16warning: Source file is more recent than executable.16 *s = 'x';
(gdb) where#0 0x080483f4 in test () at main.c:16#1 0x08048401 in main (argc=1, argv=0xbfd53e44) at main.c:22
(gdb) p s$1 = 0x80484d0 "abc"
(gdb) info filesSymbols from ".../dist/Debug/test".Local core dump file:Local exec file: `.../dist/Debug/test', file type elf32-i386. Entry point: 0x8048330 0x08048134 - 0x08048147 is .interp ... ... 0x08048330 - 0x080484ac is .text 0x080484ac - 0x080484c8 is .fini 0x080484c8 - 0x080484d4 is .rodata
聯(lián)系客服