九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Core dump 介紹 - 熾翼鐵冰's Blog

Core dump 介紹

熾翼鐵冰posted @ 2009年12月16日 23:21 in Linux(轉(zhuǎn)載) , 961 閱讀

文章一:Core Dump技術(shù)介紹

相關(guān)鏈接:http://blog.csdn.net/yclz/archive/2008/04/12/2284264.aspx

 在開發(fā)和使用Linux程序時(shí),我們最怕的就是莫過于程序莫明其妙的當(dāng)?shù)袅耍m然對(duì)整個(gè)系統(tǒng)來說是沒有什么影響,但對(duì)于程序使用尤其是程序開發(fā)者來說,這顯然是難以忍受的,有這樣一種技術(shù),操作系統(tǒng)把程序當(dāng)?shù)魰r(shí)的內(nèi)容保存起來,讓我們?cè)诔绦蜷_發(fā)時(shí)作一個(gè)調(diào)試參考。
1、什么是core dump?
Core,即core memory, 指由一系列小當(dāng)納圈形的磁性材料組成的存儲(chǔ)器,這里不過是沿用了這一稱呼,而dump就是堆放的意思。core dump又叫核心轉(zhuǎn)儲(chǔ), 當(dāng)程序運(yùn)行過程中發(fā)生異常, 程序異常退出時(shí), 由操作系統(tǒng)把程序當(dāng)前的內(nèi)存狀況存儲(chǔ)在一個(gè)core文件中, 叫core dump.
2、如何打開core dump支持?
有的操作系統(tǒng)并沒有默認(rèn)打開core dump支持,需要用ulimit -c unlimited語句進(jìn)行設(shè)置,core文件生成的位置一般在程序運(yùn)行的當(dāng)前目錄下,文件名為core.進(jìn)程號(hào)(當(dāng)然不同的系統(tǒng)也許有所不同,可以查看相手冊(cè)對(duì)路徑和文件名進(jìn)行設(shè)置).
3、Core dump的使用方法
首先應(yīng)該在用gcc進(jìn)行編譯時(shí)選擇-g選項(xiàng),以便起動(dòng)debug支持,生成可執(zhí)行文件時(shí)ex,./ex運(yùn)行可執(zhí)行文件,如果程序當(dāng)?shù)?,則會(huì)生成一個(gè)core文件,假設(shè)為core.1568,則gdb ex core.1568進(jìn)入gdb,然后再用where命令進(jìn)行查看即可。
4、舉例說明
假設(shè)我的代碼main.c為:
 

#include <stdio.h>
int div(int i, int j)
{
    return i / j;
}
int main()
{
    int i = 2;
    int j = 0;
    printf("%d ", div(i, j));
    return 0;
}

顯然有一個(gè)被零除的錯(cuò)誤,用gcc –g main.c –o main進(jìn)行編譯,然后./main執(zhí)行,不可避免的程序要down掉,然后用gdb main core文件名 進(jìn)行分析,然后你就能看到分析結(jié)果,采用這種方法,可以找到程序運(yùn)行的大部分bug.
5、其它-用kill命令查詢信號(hào)的名稱和值
有時(shí)候core dump顯示的結(jié)果是一些信號(hào)的值,這時(shí)需要對(duì)這些值進(jìn)行查詢,這時(shí)要用到kill命令。
Kill –l   :列出所有信號(hào)的名稱和值
Kill –l val:查詢值為val的信號(hào)名稱
Kill –l signame: 查詢signame信號(hào)的值。
本文總結(jié)了core dump技術(shù)的基本使用方法,并進(jìn)行了舉例,對(duì)于初學(xué)Linux程序開發(fā)者來說,多多少少會(huì)有點(diǎn)幫助。
 
備注:此次 kill -l 8 得到 FPE,  
在終端下:man 7 signal  查得:SIGFPE        8       Core    Floating point exception
 

      附:

 

Standard Signals
       Linux supports the standard signals listed below.  Several signal numbers are architecture dependent, as  indicated  in
       the  "Value" column.  (Where three values are given, the first one is usually valid for alpha and sparc, the middle one
       for i386, ppc and sh, and the last one for mips.  A - denotes that a signal is absent on  the  corresponding  architec‐
       ture.)

       First the signals described in the original POSIX.1-1990 standard.

       Signal     Value     Action   Comment
       -------------------------------------------------------------------------
       SIGHUP        1       Term    Hangup detected on controlling terminal
                                     or death of controlling process
       SIGINT        2       Term    Interrupt from keyboard
       SIGQUIT       3       Core    Quit from keyboard

       SIGILL        4       Core    Illegal Instruction
       SIGABRT       6       Core    Abort signal from abort(3)
       SIGFPE        8       Core    Floating point exception
       SIGKILL       9       Term    Kill signal
       SIGSEGV      11       Core    Invalid memory reference
       SIGPIPE      13       Term    Broken pipe: write to pipe with no readers
       SIGALRM      14       Term    Timer signal from alarm(2)
       SIGTERM      15       Term    Termination signal
       SIGUSR1   30,10,16    Term    User-defined signal 1
       SIGUSR2   31,12,17    Term    User-defined signal 2
       SIGCHLD   20,17,18    Ign     Child stopped or terminated
       SIGCONT   19,18,25    Cont    Continue if stopped
       SIGSTOP   17,19,23    Stop    Stop process
       SIGTSTP   18,20,24    Stop    Stop typed at tty

………………

 

 


 
文章二:
在Linux下產(chǎn)生并調(diào)試core文件

相關(guān)鏈接: http://blog.china-pub.com/more.asp?name=uniware&id=35478


先看看我用的是個(gè)什么機(jī)器:

$ uname -a
Linux dev 2.4.21-9.30AXsmp #1 SMP Wed May 26 23:37:09 EDT 2004 i686 i686 i386 GNU/Linux

再看看默認(rèn)的一些參數(shù),注意core file size是個(gè)0,程序出錯(cuò)時(shí)不會(huì)產(chǎn)生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

寫個(gè)簡(jiǎn)單的程序,看看core文件是不是會(huì)被產(chǎn)生。

 

$ more foo.c

#include <stdio.h>

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的設(shè)置,讓它產(chǎn)生。1024是隨便取的,要是core文件大于1024個(gè)塊,就產(chǎn)生不出來了。

 

$ ulimit -c 1024 (轉(zhuǎn)者注: 使用-c unlimited不限制core文件大?。?br>

$ 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
 

注意看上述的輸出信息,多了個(gè)(core dumped)。確實(shí)產(chǎn)生了一個(gè)core文件,9128是該進(jìn)程的PID。我們用GDB來看看這個(gè)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 ?? ()

此時(shí)用bt看不到backtrace,也就是調(diào)用堆棧,原來GDB還不知道符號(hào)信息在哪里。我們告訴它一下:

 

(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

此時(shí)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);

 

相關(guān)鏈接:http://www.chinaitpower.com/2005September/2005-09-13/203684.html

 

1、開啟系統(tǒng)的Core Dump功能

    ulimit -c core_file_size_in_kb

    如果要關(guān)閉該功能core_file_size_in_kb為0就行了。

2、設(shè)置Core Dump的核心轉(zhuǎn)儲(chǔ)文件目錄和命名規(guī)則

    文件的命名規(guī)則放在

    /proc/sys/kernel/core_name_format文件中

    使用sysctl -w "kernel.core_name_format=/coredump/%n.core"

    上例的core文件放在/coredump目錄下,文件名是進(jìn)程名+.core

    以下是一些命名的格式說明

    %P   The Process ID (current->pid)
    %U   The UID of the process (current->uid)
    %N   The command name of the process (current->comm)
    %H   The nodename of the system (system_utsname.nodename)
    %%   A "%"


3、分析核心轉(zhuǎn)儲(chǔ)文件

    程序如下:

 

#include

int main()

{

    int i=0;

    int j=5;

    int tmp;

    for(; i < 10; i++, j--)

    {

        tmp=i/j;

        printf("%d/%d=%dn", i, j, tmp);

    }

}
 

該程序運(yùn)行到i=5時(shí),會(huì)發(fā)生浮點(diǎn)運(yùn)算錯(cuò)誤(被除數(shù)等于0,j=0)

編譯上面的程序

gcc -g main.c -o eg

./eg

發(fā)生core-dump后,如果核心轉(zhuǎn)儲(chǔ)文件是core.2098,執(zhí)行下面的命令

gdb eg core.2098

可以看到當(dāng)時(shí)的信息,此出不方便錄入。


4、雜項(xiàng)

    kill -l

    上面命令列出所有信號(hào)的名稱和值

    kill -l val

    查詢值為val的信號(hào)名稱

    kill -l signame

    查詢signame信號(hào)的值

 

附錄 A. IBM AIX中產(chǎn)生Core文件的方法(來源于IBM cn)

Document #: 1311993F06001

環(huán)境:(產(chǎn)品,平臺(tái),機(jī)型,軟件版本,等)
平臺(tái):RS
軟件版本:AIX4.3 or later

問題描述:
如果用戶需要為一個(gè)應(yīng)用進(jìn)程產(chǎn)生一個(gè)完整的core文件用于分析,如何做?

解答:
1. 前提條件

    在產(chǎn)生core文件之前,先要配置系統(tǒng)參數(shù)以確認(rèn)系統(tǒng)可以產(chǎn)生一個(gè)完整的core文件。另外,文件系統(tǒng)中還需要有足夠的剩余空間用于存放所產(chǎn)生的core文件。core文件通常存放在進(jìn)程屬主用戶的主目錄中。


2. 什么時(shí)候要產(chǎn)生完整地Core文件

    缺省情況下,進(jìn)程不會(huì)產(chǎn)生一個(gè)完整的core文件。如果需要跟蹤調(diào)試一個(gè)應(yīng)用的共享內(nèi)存段中的數(shù)據(jù),特別是線程堆棧中的數(shù)據(jù),則需要產(chǎn)生一個(gè)完整的core dump文件用于分析。


3. 若需要產(chǎn)生完整的core文件信息,首先需要以root身份執(zhí)行下面的命令:

 

# chdev -l sys0 -a fullcore=true

上述命令也可以通過smitty來完成:
 

smitty --> System Environments --> Change/ Show Characteristics of Operating System

Change/ Show Characteristics of Operating System
Maximum number of PROCESSES allowed per user [128]
Maximum number of pages in block I/O BUFFER CACHE [20]
Maximum Kbytes of real memory allowed for MBUFS [0]
Automatically REBOOT system after a crash false
Continuously maintain DISK I/O history false
HIGH water mark for pending write I/Os per file [33]
LOW water mark for pending write I/Os per file [24]
Amount of usable physical memory in Kbytes 262144
State of system keylock at boot time normal
Enable full CORE dump true
Use pre-430 style CORE dump false
Enable CPU Guard disable
 

將上面列表中的“ Enable full CORE dump ”項(xiàng)設(shè)置為“true”。


4. 使用下面的命令產(chǎn)生一個(gè)core文件:
# kill -11
注意:上面的命令同時(shí)也會(huì)殺掉指定的進(jìn)程。


附錄 B. 如何查看C程序產(chǎn)生的CORE DUMP(來源于IBM cn)
Document #: 1317181000005

環(huán)境

產(chǎn)品:IBM C 和C++ Compiler
平臺(tái):AIX4.3.0以上
版本: C for AIX version 3 以上

問題描述

如何查看C程序產(chǎn)生的CORE DUMP,并找到產(chǎn)生問題的根源?

解答

在AIX操作系統(tǒng)上查看C程序產(chǎn)生的CORE DUMP,可以使用AIX操作系統(tǒng)提供的命令:dbx. 如果用戶在使用時(shí)發(fā)現(xiàn)無此命令,則需安裝 操作系統(tǒng)的文件包:bos.adt.debug。
具體使用dbx命令的方法如下:
1。首先在進(jìn)行C程序 編譯時(shí),要使用-g選項(xiàng)。
cc -g  -o samp1.o samp1.c
2.在執(zhí)行完程序,并產(chǎn)生CORE DUMP文件core后,使用:dbx   samp1.o  core 命令可查看CORE DUMP。
要想找到是哪個(gè)函數(shù)或語句引起的問題,在dbx的命令行再輸入where,即可顯示出所需的信息。dbx的命令行還可執(zhí)行多種命令以完成不同的查看功能,用戶可通過help命令了解這些命令。

 

 

相關(guān)鏈接:http://www.huihoo.org/gnu/linux/core.html

Core Dump?!

整理:Wilbur Lang

何謂 core?

在使用半導(dǎo)體作為內(nèi)存的材料前,人類是利用線圈當(dāng)作內(nèi)存的材料(發(fā)明 者為王安),線圈就叫作 core ,用線圈做的內(nèi)存就叫作 core memory。如今 ,半導(dǎo)體工業(yè)澎勃發(fā)展,已經(jīng)沒有人用 core memory 了,不過,在許多情況下, 人們還是把記憶體叫作 core 。
何謂 core dump?

我們?cè)陂_發(fā)(或使用)一個(gè)程序時(shí),最怕的就是程序莫明其妙地當(dāng)?shù)?。雖然系 統(tǒng)沒事,但我們下次仍可能遇到相同的問題。于是這時(shí)操作系統(tǒng)就會(huì)把程序當(dāng)?shù)?時(shí)的內(nèi)存內(nèi)容 dump 出來(現(xiàn)在通常是寫在一個(gè)叫 core 的 file 里面),讓 我們或是 debugger 做為參考。這個(gè)動(dòng)作就叫作 core dump。
為何會(huì)發(fā)生 core dump?

前面說過,在程序當(dāng)?shù)魰r(shí)出錯(cuò)。在 C/C++語言中,最常發(fā)生錯(cuò)誤的地方就是指 針有問題。您可以利用 core 文件和 debugger 把錯(cuò)誤找出來(要怎麼在 debugger 中使用 core 文件?man 一下 gdb 吧?。?。
我可以把 core 文件刪掉嗎?

如果你不會(huì)、不能、不需要修改程序,那就放心地把它刪除了吧!
要怎麼才不會(huì)讓 core 文件出現(xiàn)?

如果用的是tcsh的話, 以試著在 .tcshrc 里加一行:
limit coredumpsize 0
如果用的是bash的話, 在/etc/profile里加上(或者修改)一條:
ulimit -c 0

有一招, 可以讓你看出 core 最好用的地方 :)

gdb -c core, 進(jìn)去後打 where, 就可以 show 出你是在程序哪一行當(dāng)?shù)舻? 還有在當(dāng)?shù)魰r(shí)在哪個(gè) function 里, 這個(gè) function 是被哪個(gè) function 所 call 的, 而這個(gè) function 又是被哪個(gè) function 所 call 的.... 一直到 main()

由這個(gè)信息, 可以找出五六成的 bug........ 屢試不爽

但, 先決條件, 當(dāng)你在 compile 時(shí)必須把 debug information 的選項(xiàng)打開 不然, 就會(huì)出現(xiàn)一大堆你看不懂的東西,而不是你喜歡的源程序。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
段錯(cuò)誤調(diào)試神器 - Core Dump詳解
Core Dump
Linux內(nèi)核調(diào)試方法總結(jié)之coredump
【精品博文】linux編程之 Core Dump
讓程序崩潰時(shí)產(chǎn)生coredump
gdb 正常情況下生成 core dump 文件
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服