在Linux下產生並除錯core檔案
$ uname -a
$ vi foo.c
$ gcc -Wall -g foo.c
$ ./a.out
$ ls -l core.*
$ ulimit -c 1024
$ ulimit -a
$ ./a.out
$ ls -l core.*
$ gdb --core=core.9128
(gdb) file ./a.out
(gdb) l
[@more@]先看看我用的是個什麼機器:
$ 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
寫個簡單的程式,看看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.out
Segmentation fault
$ ls -l core.*
ls: core.*: No such file or directory
沒有找到core檔案,我們改改ulimit的設定,讓它產生。1024是隨便取的,要是core檔案大於1024個塊,就產生不出來了。
$ ulimit -c 1024
$ ulimit -a
core file size (blocks, -c) 1024
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
$ ./a.out
Segmentation 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.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)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/793819/viewspace-1001871/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在Ubuntu上除錯ARMv7的core檔案Ubuntu除錯
- gdb除錯core dump檔案之二除錯
- gdb除錯嵌入式裝置的core檔案除錯
- 如何使用Ida Pro和Core Dump檔案定位崩潰位置(Linux下無除錯符號的程序專享)Linux除錯符號
- 如何在 Linux 中找到並刪除重複檔案Linux
- 【Linux】linux下刪除/清空資料夾/檔案命令Linux
- Linux環境下段錯誤的產生原因及除錯方法小結Linux除錯
- Linux下的除錯工具Linux除錯
- 在Linux中,如何建立、刪除和修改檔案?Linux
- 在 Linux 中如何刪除檔案中的空行Linux
- 在 .NET Core 中使用 ViewConfig 除錯配置View除錯
- gdb除錯coredump檔案除錯
- Linux下刪除亂碼或特殊字元檔案Linux字元
- .NET Core使用Source Link提高原始碼除錯體驗和生產效率原始碼除錯
- Linux刪除檔案命令Linux
- Linux批量刪除檔案Linux
- 在Linux系統中如何刪除一個檔案?Linux
- 在WIN下刪除LINUXLinux
- Vue生產環境除錯的方法Vue除錯
- [20200414]Linux下快速刪除大量檔案(補充).txtLinux
- linux 模糊批量刪除檔案Linux
- linux Typora修改Windows檔案產生亂碼(未解決)LinuxWindows
- linux系統下檔案誤刪除該如何恢復?Linux
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- Linux下用rm刪除的檔案的恢復方法Linux
- vscode 除錯多個js檔案VSCode除錯JS
- linux下的檔案系統出錯 Structure needs cleaningLinuxStruct
- 如何在Macbook中檢視並刪除最近下載的檔案?Mac
- 在linux下使用Apache搭建檔案伺服器LinuxApache伺服器
- vscode除錯多C++檔案專案VSCode除錯C++
- 利用MATLAB產生COE檔案Matlab
- Linux下刪除指定資料夾下指定字尾名的檔案Linux
- Linux除錯Linux除錯
- Linux基楚操作指引【檔案改名、檔案備份、檔案刪除】Linux
- 使用 Visual Studio 來除錯 dll 檔案除錯
- 在Linux中,刪除一個檔案,刪不掉是什麼原因?Linux
- Linux 命令列刪除指定副檔名檔案Linux命令列
- Linux下合併檔案Linux
- Linux或者國產OS下使用HHDESK進行檔案管理Linux