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

posts - 17,comments - 7,trackbacks - 0

當我們的程序崩潰時,內核有可能把該程序當前內存映射到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.3BSD由abort函數產生此信號。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文件調試程序

看下面的例子:

/*core_dump_test.c*/
 #include <stdio.h>
const char *str = "test";
void core_test(){
    str[1] = 'T';
}

int main()
{
    core_test();
    return 0;
}

編譯:
gcc –g core_dump_test.c -o core_dump_test

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

執行:
 ./core_dump_test
段錯誤

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

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

ulimit -c unlimited
ulimit -c unlimited

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

再次執行:
./core_dump_test
段錯誤
(core dumped)
ls core.*
core.6133

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

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

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文件。

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"...
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  0x080482fd in core_test () at core_dump_test.c:7
7           str[1] = 'T';
(gdb) where
#0  0x080482fd in core_test () at core_dump_test.c:7
#1  0x08048317 in main () at core_dump_test.c:12
#2  0x42015574 in __libc_start_main () from /lib/tls/libc.so.6

GDB中鍵入where,就會看到程序崩潰時堆棧信息(當前函數之前的所有已調用函數的列表(包括當前函數),gdb只顯示最近幾個),我們很容易找到我們的程序在最后崩潰的時候調用了core_dump_test.c 7行的代碼,導致程序崩潰。注意:在編譯程序的時候要加入選項-g。您也可以試試其他命令, 如 framlist等。更詳細的用法,請查閱GDB文檔。

core文件創建在什么位置

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

什么時候不產生core文件

在下列條件下不產生core文件:
( a )進程是設置-用戶-ID,而且當前用戶并非程序文件的所有者;
( b )進程是設置-組-ID,而且當前用戶并非該程序文件的組所有者;
( c )用戶沒有寫當前工作目錄的許可權;
( d )文件太大。core文件的許可權(假定該文件在此之前并不存在)通常是用戶讀/寫,組讀和其他讀。

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


posted on 2008-12-10 21:23 。。。。 閱讀(14789) 評論(0)  編輯 收藏 引用 所屬分類: c++ 編譯 調試 開發環境
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美成人dvd在线视频| 免费欧美网站| 一本一本久久a久久精品综合麻豆| 牛牛国产精品| 亚洲天堂av在线免费| 日韩视频第一页| 国产精品久久久久久久一区探花| 欧美一区二区三区四区夜夜大片| 小处雏高清一区二区三区| 国产亚洲精品高潮| 麻豆精品在线播放| 欧美成人一品| 亚洲欧美日韩国产综合| 午夜免费在线观看精品视频| 在线播放不卡| 亚洲国产精选| 国产精品美女黄网| 免费成人黄色av| 欧美日韩美女一区二区| 午夜精品www| 久久手机精品视频| 亚洲一级在线| 久久免费视频这里只有精品| 一本色道久久综合亚洲精品高清 | 午夜精品久久久久久久白皮肤| 新狼窝色av性久久久久久| 在线观看日韩av| 中国成人黄色视屏| 亚洲国产经典视频| 亚洲欧美日韩在线| 亚洲精品自在在线观看| 亚洲欧洲av一区二区三区久久| 亚洲人成毛片在线播放女女| 亚洲综合社区| 一二美女精品欧洲| 久久婷婷人人澡人人喊人人爽| 亚洲亚洲精品在线观看| 久久久欧美一区二区| 亚洲欧美国产精品va在线观看| 久久一日本道色综合久久| 亚洲欧美日韩精品久久| 久热精品视频在线| 久久国产精品毛片| 国产精品福利网站| 亚洲欧洲日本mm| 激情综合色丁香一区二区| 一区二区三区高清| 日韩视频一区二区三区在线播放| 久久久久国产免费免费| 欧美在线三级| 国产精品久久久久久久浪潮网站| 亚洲国产一区二区三区在线播| 激情亚洲成人| 欧美在线日韩| 欧美一区在线视频| 国产精品a级| 一区二区精品在线| 中文成人激情娱乐网| 欧美国产精品| 最近看过的日韩成人| 亚洲精品国产视频| 毛片精品免费在线观看| 欧美成人精品h版在线观看| 国产视频亚洲| 午夜精品亚洲| 久久国产黑丝| 国内精品国语自产拍在线观看| 午夜日韩视频| 欧美在线网站| 国产综合av| 久久九九免费视频| 欧美电影在线| 99热免费精品| 国产精品国产三级国产专区53| 中文在线一区| 香蕉精品999视频一区二区| 国产精品午夜春色av| 亚洲欧美日韩在线不卡| 久久精品亚洲| 黄色国产精品| 欧美成年人网站| 亚洲精选在线| 香港成人在线视频| 国内一区二区在线视频观看| 久久亚洲国产成人| 亚洲国产精品一区二区第四页av| 亚洲免费观看高清完整版在线观看熊 | 欧美色中文字幕| 亚洲无限乱码一二三四麻| 亚洲欧美影院| 韩国av一区二区| 欧美成人精品在线播放| 一区二区不卡在线视频 午夜欧美不卡' | 久久婷婷久久一区二区三区| 亚洲国产福利在线| 亚洲在线视频一区| 精品动漫3d一区二区三区免费版| 欧美88av| 亚洲欧美一区二区三区在线| 男男成人高潮片免费网站| 日韩视频亚洲视频| 国产亚洲福利| 欧美激情亚洲另类| 亚洲一区二区三区中文字幕在线 | 亚洲另类一区二区| 国产精品一区二区女厕厕| 久久久精品999| 一本色道久久综合狠狠躁篇的优点| 久久精品女人| 日韩视频精品在线| 韩国在线一区| 国产精品地址| 欧美mv日韩mv国产网站| 午夜欧美视频| 日韩亚洲欧美中文三级| 免费成人高清| 久久er99精品| 亚洲性视频h| 亚洲国产精品悠悠久久琪琪| 国产精品午夜在线| 欧美日韩国产一区二区三区| 久久久久国色av免费看影院| 亚洲永久在线观看| 亚洲人成网站999久久久综合| 久久―日本道色综合久久| 亚洲一区二区三区四区五区黄 | 韩日精品视频| 国产精品一区在线观看| 欧美另类久久久品| 欧美不卡一区| 麻豆精品91| 久久偷窥视频| 久久国产精品一区二区三区四区 | 欧美在线观看网站| 国产精品99久久久久久白浆小说| 欧美国产综合一区二区| 免费一级欧美片在线播放| 久久久蜜桃一区二区人| 欧美一区二区三区视频在线观看 | 亚洲高清不卡在线| 好吊日精品视频| 国产一区久久久| 国产亚洲毛片在线| 国产精品午夜视频| 国产精品你懂的| 国产伦一区二区三区色一情| 国产精品久久久久久av下载红粉| 欧美私人啪啪vps| 欧美午夜片在线观看| 国产精品av一区二区| 国产精品免费aⅴ片在线观看| 国产精品va在线播放我和闺蜜| 欧美三区在线| 国产欧美一区二区精品性| 国产三区二区一区久久| 国外成人网址| 亚洲黄页视频免费观看| aa亚洲婷婷| 香蕉尹人综合在线观看| 久久久噜噜噜久久| 欧美成人乱码一区二区三区| 亚洲国产精品高清久久久| 亚洲精品日韩久久| 中文在线资源观看网站视频免费不卡 | 久久久久久久91| 欧美大片在线看| 国产精品成人在线观看| 国产日韩精品一区二区三区 | 欧美日韩伦理在线免费| 欧美视频一二三区| 国产亚洲福利社区一区| 在线观看国产成人av片| 99国产精品| 欧美在线视频全部完| 欧美高清自拍一区| 亚洲视频一区| 久久久精品2019中文字幕神马| 欧美精品啪啪| 国产一区二区视频在线观看 | 国产精品最新自拍| 伊人婷婷欧美激情| 亚洲图片你懂的| 免费观看成人| 在线视频欧美精品| 久久影视三级福利片| 欧美视频一区二区三区四区 | 欧美精品导航| 国户精品久久久久久久久久久不卡| 亚洲激情啪啪| 欧美影院在线| 99视频精品全国免费| 久久狠狠久久综合桃花| 国产精品porn| 亚洲精品国产精品乱码不99按摩| 久久aⅴ国产紧身牛仔裤| 亚洲精品综合| 免费观看成人网| 国内精品美女在线观看| 亚洲欧美一区二区三区在线| 亚洲国产一成人久久精品|