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

posts - 17,comments - 7,trackbacks - 0

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

何謂core文件

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

當程序接收到以下UNIX信號會產(chǎn)生core文件:

名字

說明

ANSI C  POSIX.1

SVR4  4.3+BSD

缺省動作

SIGABRT

異常終止(abort)

  .       .

  .      .

終止w/core

SIGBUS

硬件故障

          .

  .      .

終止w/core

SIGEMT

硬件故障

 

  .      .

終止w/core

SIGFPE

算術(shù)異常

  .       .

  .      .

終止w/core

SIGILL

非法硬件指令

  .       .

  .      .

終止w/core

SIGIOT

硬件故障

 

  .      .

終止w/core

SIGQUIT

終端退出符

          .

  .      .

終止w/core

SIGSEGV

無效存儲訪問

  .       .

  .      .

終止w/core

SIGSYS

無效系統(tǒng)調(diào)用

 

  .      .

終止w/core

SIGTRAP

硬件故障

 

  .      .

終止w/core

SIGXCPU

超過CPU限制(setrlimit)

 

  .      .

終止w/core

SIGXFSZ

超過文件長度限制(setrlimit)

 

  .      .

終止w/core

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

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

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

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

SIGABRT 調(diào)用abort函數(shù)時產(chǎn)生此信號。進程異常終止。

SIGBUS  指示一個實現(xiàn)定義的硬件故障。

SIGEMT  指示一個實現(xiàn)定義的硬件故障。

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

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

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

4.3BSD由abort函數(shù)產(chǎn)生此信號。SIGABRT現(xiàn)在被用于此。

SIGIOT  這指示一個實現(xiàn)定義的硬件故障。

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

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

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

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

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

SIGSYS  指示一個無效的系統(tǒng)調(diào)用。由于某種未知原因,進程執(zhí)行了一條系統(tǒng)調(diào)用指令,

但其指示系統(tǒng)調(diào)用類型的參數(shù)卻是無效的。

SIGTRAP 指示一個實現(xiàn)定義的硬件故障。

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

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

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

摘自《UNIX環(huán)境高級編程》第10章 信號。

 

使用core文件調(diào)試程序

看下面的例子:

/*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

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

執(zhí)行:
 ./core_dump_test
段錯誤

運行core_dump_test程序出現(xiàn)了“段錯誤”,但沒有產(chǎn)生core文件。這是因為系統(tǒng)默認core文件的大小為0,所以沒有創(chuàng)建。可以用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

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

可以看到已經(jīng)創(chuàng)建了一個core.6133的文件.6133core_dump_test程序運行的進程ID

調(diào)式core文件
core文件是個二進制文件,需要用相應(yīng)的工具來分析程序崩潰時的內(nèi)存映像。

file core.6133

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

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

core文件創(chuàng)建在什么位置

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

什么時候不產(chǎn)生core文件

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

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


posted on 2008-12-10 21:23 。。。。 閱讀(14782) 評論(0)  編輯 收藏 引用 所屬分類: c++ 編譯 調(diào)試 開發(fā)環(huán)境
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩视频一区二区三区在线播放免费观看 | 亚洲综合国产精品| 亚洲丶国产丶欧美一区二区三区| 老司机亚洲精品| 久久性色av| 亚洲国产成人av| 99国内精品| 欧美在线91| 欧美寡妇偷汉性猛交| 国产精品av免费在线观看| 国产欧美精品xxxx另类| 国产在线欧美日韩| 亚洲精品久久久久久下一站| 亚洲一区免费视频| 久久综合电影一区| 日韩视频一区二区三区在线播放| 亚洲欧美国产精品桃花| 久久视频这里只有精品| 欧美日韩在线播| 精品动漫av| 99在线热播精品免费| 欧美一区深夜视频| 亚洲黄色在线| 久久国产精品亚洲77777| 欧美日韩视频第一区| 国精品一区二区三区| 一区二区三区精密机械公司| 久久人91精品久久久久久不卡| 亚洲精品久久久久久久久久久久| 香蕉久久夜色精品国产使用方法| 免费一级欧美片在线播放| 亚洲靠逼com| 欧美中文字幕第一页| 亚洲人成网站色ww在线| 欧美一二三视频| 欧美日韩在线不卡一区| 亚洲电影av| 久久精品欧洲| 亚洲一区二区免费视频| 欧美国产精品专区| 伊人色综合久久天天| 午夜一区二区三区在线观看| 亚洲电影在线| 久久久777| 国产精品影片在线观看| 99热免费精品在线观看| 欧美大片在线看| 久久久久久久成人| 国产日韩精品一区二区三区| 亚洲视频一二三| 亚洲人久久久| 欧美片在线观看| 亚洲麻豆视频| 亚洲黄色视屏| 欧美激情精品久久久六区热门| 激情欧美一区二区三区在线观看| 欧美一区二视频| 亚洲欧美日韩精品一区二区| 国产精品久久久久久妇女6080 | 免费在线成人av| 久久久久.com| 亚洲福利一区| 欧美国产日韩一区二区| 巨乳诱惑日韩免费av| 亚洲国产精品一区二区www| 蜜臀久久99精品久久久画质超高清| 校园激情久久| 在线日韩视频| 亚洲精品欧洲| 国产伦精品一区二区三区| 欧美一区日韩一区| 久久精品国产久精国产一老狼| 黄色成人av网站| 免费观看久久久4p| 欧美ed2k| 亚洲自拍偷拍色片视频| 欧美伊人久久久久久午夜久久久久| 国产亚洲精品aa午夜观看| 米奇777在线欧美播放| 欧美激情一区二区三区在线视频观看| 99re8这里有精品热视频免费| 一区二区三区成人| 国产综合激情| 亚洲精品久久久久中文字幕欢迎你| 欧美视频在线免费| 久久亚洲精品伦理| 欧美日韩国产精品| 欧美在线999| 欧美怡红院视频| 欧美黄色成人网| 欧美日韩国产经典色站一区二区三区| 亚洲字幕一区二区| 久久精品30| 亚洲女爱视频在线| 久久一区二区三区四区| 国产精品99久久久久久久vr| 午夜在线视频观看日韩17c| 亚洲国产三级| 亚洲一区免费网站| 最新亚洲激情| 欧美在线观看一区| 亚洲视频一区二区免费在线观看| 欧美一区二区视频在线观看| 99精品国产99久久久久久福利| 欧美一区网站| 亚洲一区二区少妇| 欧美chengren| 久久综合色天天久久综合图片| 欧美日韩一二区| 欧美国产日韩精品免费观看| 国产伦精品一区二区三区高清| 亚洲精品国产精品国自产在线| 国内伊人久久久久久网站视频| 日韩视频在线永久播放| 亚洲国产精品第一区二区三区| 亚洲欧美在线高清| 亚洲免费视频网站| 欧美日韩1234| 亚洲三级电影在线观看 | 妖精成人www高清在线观看| 午夜精品一区二区三区在线播放| 一本在线高清不卡dvd| 久久在线精品| 美女精品国产| 国产一区二区三区日韩| 亚洲一区二区三区乱码aⅴ| 亚洲视频中文| 欧美午夜精品久久久久久孕妇 | 久久精品女人的天堂av| 国产精品v欧美精品v日韩| 亚洲日本在线观看| 亚洲免费观看高清完整版在线观看熊| 欧美中文字幕视频在线观看| 欧美一区二区观看视频| 国产精品一区二区久久久| 亚洲天天影视| 性做久久久久久免费观看欧美| 国产精品久久久久久久久借妻| 在线一区日本视频| 午夜精品一区二区三区电影天堂 | 国产精品亚洲美女av网站| 亚洲一级在线| 久久国产日韩欧美| 国模大胆一区二区三区| 欧美与欧洲交xxxx免费观看| 久久亚洲色图| 亚洲国产清纯| 久久亚洲精品视频| 狠狠色综合一区二区| 中日韩视频在线观看| 亚洲欧美日韩在线不卡| 国产精品视频精品| 欧美在线啊v| 欧美成人午夜77777| 亚洲美女淫视频| 国产精品国产福利国产秒拍| 亚洲欧美国产不卡| 美女999久久久精品视频| 日韩视频免费观看高清完整版| 欧美日韩一区三区四区| 羞羞色国产精品| 欧美成人午夜激情| 亚洲一区国产一区| 国产一区二区三区观看| 美女精品在线| 一区二区三区 在线观看视| 欧美主播一区二区三区| 亚洲国产精品激情在线观看| 欧美精品首页| 欧美一区二区三区在线播放| 欧美激情一区| 性欧美xxxx视频在线观看| 在线国产欧美| 欧美亚洲第一页| 麻豆成人91精品二区三区| 亚洲毛片视频| 久久久亚洲午夜电影| 99在线精品视频在线观看| 国产欧美日韩91| 欧美高清日韩| 欧美一区二区久久久| 亚洲黄色高清| 久久久久久9999| 亚洲一级免费视频| 亚洲二区免费| 国产一区二区三区精品久久久 | 欧美精品乱码久久久久久按摩| 亚洲一区二区在线观看视频| 欧美激情精品久久久久久| 欧美在线国产| 亚洲在线一区二区三区| 亚洲精品日产精品乱码不卡| 国内成+人亚洲| 国产伦一区二区三区色一情| 欧美日韩精品欧美日韩精品一| 久久综合久久久久88| 久久av资源网| 欧美一区亚洲二区| 羞羞答答国产精品www一本| 亚洲欧美日韩高清|