青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

core 文件

Posted on 2009-03-13 10:24 Prayer 閱讀(569) 評論(0)  編輯 收藏 引用 所屬分類: LINUX/UNIX/AIX

當我們的程序崩潰時,內核有可能把該程序當前內存映射到core文件里,方便程序員找到程序出現問題的地方。最常出現的,幾乎所有C程序員都出現過的錯誤就是“段錯誤”了。也是最難查出問題原因的一個錯誤。下面我們就針對“段錯誤”來分析core文件的產生、以及我們如何利用core文件找到出現崩潰的地方。

 

何謂core文件

    當一個程序崩潰時,在進程當前工作目錄的core文件中復制了該進程的存儲圖像core文件僅僅是一個內存映象(同時加上調試信息),主要是用來調試的。

 

當程序接收到以下UNIX信號會產生core文件:

名字

說明

ANSI C POSIX.1

SVR4 4.3+BSD

缺省動作

SIGABRT

異常終止(abort)

 .       .

 .      .

終止w/core

SIGBUS

硬件故障

          .

 .      .

終止w/core

SIGEMT

硬件故障

 

 .      .

終止w/core

SIGFPE

算術異常

 .       .

 .      .

終止w/core

SIGILL

非法硬件指令

 .       .

 .      .

終止w/core

SIGIOT

硬件故障

 

 .      .

終止w/core

SIGQUIT

終端退出符

          .

 .      .

終止w/core

SIGSEGV

無效存儲訪問

 .       .

 .      .

終止w/core

SIGSYS

無效系統調用

 

 .      .

終止w/core

SIGTRAP

硬件故障

 

 .      .

終止w/core

SIGXCPU

超過CPU限制(setrlimit)

 

 .      .

終止w/core

SIGXFSZ

超過文件長度限制(setrlimit)

 

 .      .

終止w/core

 

    在系統默認動作列,“終止w/core”表示在進程當前工作目錄的core文件中復制了該進程的存儲圖像(該文件名為core,由此可以看出這種功能很久之前就是UNIX功能的一部分)。大多數UNIX調試程序都使用core文件以檢查進程在終止時的狀態。

 

core文件的產生不是POSIX.1所屬部分,而是很多UNIX版本的實現特征。UNIX第6版沒有檢查條件(a)和(b),并且其源代碼中包含如下說明:“如果你正在找尋保護信號,那么當設置-用戶-ID命令執行時,將可能產生大量的這種信號”。4.3 + BSD產生名為core.prog的文件,其中prog是被執行的程序名的前1 6個字符。它對core文件給予了某種標識,所以是一種改進特征。

 

表中“硬件故障”對應于實現定義的硬件故障。這些名字中有很多取自UNIX早先在DP-11上的實現。請查看你所使用的系統的手冊,以確切地確定這些信號對應于哪些錯誤類型。

 

下面比較詳細地說明這些信號。

SIGABRT 調用abort函數時產生此信號。進程異常終止。

SIGBUS  指示一個實現定義的硬件故障。

SIGEMT  指示一個實現定義的硬件故障。

EMT這一名字來自PDP-11的emulator trap 指令。

SIGFPE  此信號表示一個算術運算異常,例如除以0,浮點溢出等。

 

SIGILL  此信號指示進程已執行一條非法硬件指令。

4.3BSDabort函數產生此信號。SIGABRT現在被用于此。

SIGIOT  這指示一個實現定義的硬件故障。

IOT這個名字來自于PDP-11對于輸入/輸出TRAP(input/output TRAP)指令的縮寫。系統V的早期版本,由abort函數產生此信號。SIGABRT現在被用于此。

SIGQUIT 當用戶在終端上按退出鍵(一般采用Ctrl-\)時,產生此信號,并送至前臺進

程組中的所有進程。此信號不僅終止前臺進程組(如SIGINT所做的那樣),同時產生一個core文件。

SIGSEGV 指示進程進行了一次無效的存儲訪問。

名字SEGV表示“段違例(segmentation violation)”。

SIGSYS  指示一個無效的系統調用。由于某種未知原因,進程執行了一條系統調用指令,

但其指示系統調用類型的參數卻是無效的。

SIGTRAP 指示一個實現定義的硬件故障。

此信號名來自于PDP-11的TRAP指令。

SIGXCPU SVR4和4.3+BSD支持資源限制的概念。如果進程超過了其軟C P U時間限制,則產生此信號。

SIGXFSZ 如果進程超過了其軟文件長度限制,則SVR4和4.3+BSD產生此信號。

 

摘自《UNIX環境高級編程》第10章 信號。

 

看下面的例子:

  

/*core_dump_test.c*/

  1 #include <stdio.h>

      2

      3 int main()

      4 {

      5     printf("%s\n", 9);

      6     return 0;

      7 }

 

編譯:

[zhanghua@localhost core_dump]$ gcc –g core_dump_test.c -o core_dump_test

 

如果需要調試程序的話,使用gcc編譯時加上-g選項,這樣調試core文件的時候比較容易找到錯誤的地方。

 

 

執行:

 

[zhanghua@localhost core_dump]$ ./core_dump_test

段錯誤

 

運行core_dump_test程序出現了“段錯誤”,但沒有產生core文件。這是因為系統默認core文件的大小為0,所以沒有創建。可以用ulimit命令查看和修改core文件的大小。

 

[zhanghua@localhost core_dump]$ ulimit -c

0

[zhanghua@localhost core_dump]$ ulimit -c 1000

[zhanghua@localhost core_dump]$ ulimit -c

1000

 

-c 指定修改core文件的大小,1000指定了core文件大小。也可以對core文件的大小不做限制,如:

 

[zhanghua@localhost daemon]# ulimit -c unlimited

[zhanghua@localhost daemon]# ulimit -c

unlimited

 

如果想讓修改永久生效,則需要修改配置文件,如 .bash_profile/etc/profile/etc/security/limits.conf

 

再次執行:

[zhanghua@localhost core_dump]$ ./core_dump_test

段錯誤 (core dumped)

[zhanghua@localhost core_dump]$ ls core.*

core.6133

 

可以看到已經創建了一個core.6133的文件。6133core_dump_test程序運行的進程ID

 

使用core文件調試程序

       core文件是個二進制文件,需要用相應的工具來分析程序崩潰時的內存映像。

 

[zhanghua@localhost core_dump]$ file core.6133

core.6133: ELF 32-bit LSB core file Intel 80386, version 1 (SYSV), SVR4-style, from 'core_dump_test'

 

Linux下可以用GDB來調試core文件。

 

[zhanghua@localhost core_dump]$ gdb core_dump_test core.6133

GNU gdb Red Hat Linux (5.3post-0.20021129.18rh)

Copyright 2003 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-redhat-linux-gnu"...

 

warning: exec file is newer than core file.

Core was generated by `./core_dump_test'.

Program terminated with signal 11, Segmentation fault.

Reading symbols from /lib/tls/libc.so.6...done.

Loaded symbols for /lib/tls/libc.so.6

Reading symbols from /lib/ld-linux.so.2...done.

Loaded symbols for /lib/ld-linux.so.2

#0 0x4207a42b in strlen () from /lib/tls/libc.so.6

(gdb) where

#0 0x4207a42b in strlen () from /lib/tls/libc.so.6

#1 0x4204752d in vfprintf () from /lib/tls/libc.so.6

#2 0x4204f112 in printf () from /lib/tls/libc.so.6

#3 0x08048347 in main () at core_dump_test.c:5

#4 0x42015574 in __libc_start_main () from /lib/tls/libc.so.6

 

GDB中鍵入where,就會看到程序崩潰時最后5個調用的函數,我們很容易找到我們的程序在最后崩潰的時候調用了core_dump_test.c 5行的代碼,導致程序崩潰。注意:在編譯程序的時候要加入選項-g。您也可以試試其他命令, 如 framlist等。更詳細的用法,請查閱GDB文檔。

 

core文件創建在什么位置

       在進程當前工作目錄的下創建。通常與程序在相同的路徑下。但如果程序中調用了chdir函數,則有可能改變了當前工作目錄。這時core文件創建在chdir指定的路徑下。有好多程序崩潰了,我們卻找不到core文件放在什么位置。和chdir函數就有關系。當然程序崩潰了不一定都產生core文件。

 

什么時候不產生core文件

在下列條件下不產生core文件:

( a )進程是設置-用戶-ID,而且當前用戶并非程序文件的所有者;

( b )進程是設置-組-ID,而且當前用戶并非該程序文件的組所有者;

( c )用戶沒有寫當前工作目錄的許可權;

( d )文件太大core文件的許可權(假定該文件在此之前并不存在)通常是用戶讀/寫,組讀和其他讀。

 

 

利用GDB調試core文件,當遇到程序崩潰時我們不再束手無策。

 

      

作者:張華

2006年8月2日

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区四区国产| 亚洲视频免费| 欧美激情精品久久久久久| 欧美在线免费观看亚洲| 亚洲自拍偷拍福利| 亚洲一区自拍| 欧美在线视频一区| 久久久久久久综合狠狠综合| 久久视频这里只有精品| 亚洲蜜桃精久久久久久久| 一本到12不卡视频在线dvd| 一区二区三区产品免费精品久久75 | 免费看成人av| 亚洲国产成人av好男人在线观看| 久久夜色精品国产欧美乱| 欧美成人黑人xx视频免费观看| 最新69国产成人精品视频免费| 日韩午夜av在线| 性感少妇一区| 欧美黄色aaaa| 国产亚洲欧美日韩一区二区| 亚洲国产美女久久久久| 亚洲一区二区精品在线| 久久在线播放| 99国产麻豆精品| 久久久久久久久蜜桃| 欧美日韩成人网| 国产综合网站| 在线亚洲成人| 久久亚洲精品一区二区| 99国产精品99久久久久久粉嫩| 午夜久久一区| 欧美色图五月天| 亚洲高清毛片| 欧美专区在线观看一区| 亚洲精品一区二区三区蜜桃久| 欧美一区二区三区四区高清| 欧美日韩国产综合视频在线观看 | 国产亚洲激情| 99ri日韩精品视频| 久久色在线观看| 亚洲一区二区三区成人在线视频精品 | 久久av一区| 国产精品成人播放| 亚洲日本aⅴ片在线观看香蕉| 欧美在线视频免费播放| 99精品国产福利在线观看免费| 久久噜噜噜精品国产亚洲综合| 国产精品欧美风情| av成人天堂| 亚洲黑丝在线| 看欧美日韩国产| 伊人久久大香线蕉综合热线| 欧美在线关看| 羞羞答答国产精品www一本| 国产精品久久一卡二卡| 国产精品国产三级国产专播品爱网| 在线播放豆国产99亚洲| 久久精品最新地址| 午夜精品亚洲一区二区三区嫩草| 国产精品白丝av嫩草影院| 亚洲小视频在线观看| 日韩一级不卡| 国产精品高潮视频| 午夜在线观看欧美| 午夜精品一区二区三区在线视| 国产日韩欧美在线播放不卡| 久久国产精品99国产| 欧美在线精品免播放器视频| 好看的av在线不卡观看| 欧美成年人视频| 欧美精品久久久久久久久老牛影院 | 在线国产日韩| 欧美成人综合一区| 欧美不卡在线视频| 一本色道久久88综合亚洲精品ⅰ | 午夜在线电影亚洲一区| 国产日韩欧美日韩| 巨乳诱惑日韩免费av| 狂野欧美一区| 国产精品99久久不卡二区| 亚洲午夜一级| 国模私拍一区二区三区| 欧美激情女人20p| 欧美日韩国产精品| 欧美一区二区精品| 久久久久久一区二区| 亚洲免费观看高清完整版在线观看| 999在线观看精品免费不卡网站| 国产精品入口尤物| 免费视频一区| 国产精品久久午夜夜伦鲁鲁| 久久夜色精品国产噜噜av| 免费在线看一区| 亚洲一区二区免费| 久久精品九九| 亚洲一区中文| 美国十次成人| 欧美在线一区二区三区| 欧美福利网址| 久久精品一区蜜桃臀影院| 欧美激情精品久久久| 久久久久99| 欧美午夜精品| 欧美va亚洲va国产综合| 国产精品美女主播| 亚洲黄色三级| 红桃视频亚洲| 亚洲欧美日韩视频一区| 99天天综合性| 久久美女性网| 久久av一区二区| 欧美视频日韩| 99这里只有精品| 久久精品2019中文字幕| 午夜性色一区二区三区免费视频 | 欧美大片免费看| 欧美有码视频| 国产精品高清在线观看| 亚洲激情二区| 亚洲国产精品一区| 久久国产精品亚洲77777| 亚洲免费视频在线观看| 欧美精品国产精品| 欧美激情亚洲国产| 一区免费视频| 久久精品123| 久久国产加勒比精品无码| 国产精品福利在线| 一区二区毛片| 亚洲在线一区| 欧美四级在线观看| 日韩亚洲综合在线| 亚洲一区二区三区在线| 欧美视频一区二区三区…| 亚洲精品在线一区二区| 夜夜嗨av色一区二区不卡| 欧美福利小视频| 亚洲黄色在线看| 99精品欧美一区二区三区综合在线 | 亚洲国产成人av| 雨宫琴音一区二区在线| 久久午夜激情| 亚洲国产导航| 999在线观看精品免费不卡网站| 欧美第一黄色网| 亚洲高清资源| 在线一区二区日韩| 欧美四级剧情无删版影片| 一区二区三区久久精品| 午夜精品一区二区三区在线视| 国产精品午夜在线| 久久成人这里只有精品| 欧美成人综合一区| 99视频精品免费观看| 欧美视频在线一区| 亚洲欧美激情一区| 美女被久久久| 亚洲免费成人av| 国产精品啊啊啊| 性做久久久久久| 亚洲国产精品一区二区第一页 | 欧美一级片久久久久久久| 国产视频一区免费看| 久久麻豆一区二区| 亚洲精品一区二区三区樱花| 欧美在现视频| 亚洲精品久久久久久久久久久| 欧美日韩一区高清| 欧美在线一区二区三区| 亚洲国产精品黑人久久久 | 国产亚洲精品aa| 欧美www在线| 亚洲欧美精品| 韩国成人福利片在线播放| 国产一区二区精品久久91| 久久久久久亚洲精品中文字幕 | 久久精品国产91精品亚洲| 乱码第一页成人| 一区二区三区 在线观看视| 国产日本欧洲亚洲| 欧美精品三级在线观看| 欧美一区二区三区播放老司机| 亚洲成色777777女色窝| 午夜日韩电影| 99精品视频免费全部在线| 国产一区亚洲| 国产精品看片你懂得| 免费欧美电影| 久久av在线| 亚洲一区二区三区在线视频| 欧美大尺度在线| 欧美在线视频免费观看| 一本久道久久综合婷婷鲸鱼| 在线视频成人| 国内外成人免费激情在线视频网站| 欧美色中文字幕| 欧美—级在线免费片| 免费黄网站欧美| 噜噜噜躁狠狠躁狠狠精品视频 |