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

酸菜豬蹄的程序人生
木下編程屯屯燙燙


作者:<leohe.leohe@gmail.com>

    Linux系統(tǒng)中在應(yīng)用程序運(yùn)行過程中經(jīng)常會遇到程序突然崩潰,提示:Segmentation fault,這是因?yàn)閼?yīng)用程序收到了SIGSEGV信號。這個信號提示當(dāng)進(jìn)程發(fā)生了無效的存儲訪問,當(dāng)接收到這個信號時,缺省動作是:終止w/core。 終止w/core的含義是:在進(jìn)程當(dāng)前目錄生成core文件,并將進(jìn)程的內(nèi)存映象復(fù)制到core文件中,core文件的默認(rèn)名稱就是“core”(這是 Unix類系統(tǒng)的一個由來已久的功能)。
    事實(shí)上,并不是只有SIGSEGV信號產(chǎn)生coredump,還有下面一些信號也產(chǎn)生coredump:SIGABRT(異常終止)、SIGBUS(硬件 故障)、SIGEMT(硬件故障)、SIGFPE(算術(shù)異常)、SIGILL(非法硬件指令)、SIGIOT(硬件故 障),SIGQUIT,SIGSYS(無效系統(tǒng)調(diào)用),SIGTRAP(硬件故障)等。
    在程序的開發(fā)調(diào)試階段(尤其是大型軟件開發(fā)),發(fā)生程序異常崩潰時常規(guī)的調(diào)試方法常常是無比的痛苦:無窮的log中也不見得有什么有意義的信息。好在GDB提供和利用core文件進(jìn)行調(diào)試的途徑,大大方便了這類問題的調(diào)試。

    下面我們通過一個簡單的例子來看看怎么通過GDB來調(diào)試一個違規(guī)訪問內(nèi)存導(dǎo)致的程序崩潰。這里我們順便講講動態(tài)庫的調(diào)試。

/******** mylib.h **********/
#ifndef __MY_LIB_H__
#define __MY_LIB_H__

int add(int x, int y);

#endif // __MY_LIB_H__
/******** end **********/



/******** mylib.c **********/
#include <stdlib.h>
#include "mylib.h"

int add(int x, int y)
{
    char* pc = NULL;
    *pc = 10;

    return x + y;
}
/******** end **********/

/******** main.c **********/

#include <stdio.h>
#include <stdlib.h>

#include "mylib.h"

int main (void)
{
    int ret = -1;
    int a = 10, b = 20;
    ret = add(a, b);

    printf("The result is: %d\n", ret);

    return 0;
}
/******** end **********/

#####################################
# File Name: Makefile
#
#####################################

CC = gcc
LD = gcc

all:
        $(CC) mylib.c -g -I. -fPIC -shared -o libmylib.so
        $(CC) main.c -g -I. -L. -lmylib -o test

clean:
        rm *.so test
#############   END   ###############

    首先將上面的代碼分別存儲到相應(yīng)的目錄,名稱為:mylib.h、mylib.c、main.c、Makefile。

1)編譯測試代碼。注)編譯時的 -g 選項(xiàng)是必須的。
[xxx@yyy]$ make
gcc mylib.c -g -I. -fPIC -shared -o libmylib.so
gcc main.c -g -I. -L. -lmylib -o t

通過ls命令我們可以看到生成了測試程序test.
[xxx@yyy]$ ls
libmylib.so main.c Makefile mylib.c mylib.h test

2)執(zhí)行測試程序
[xxx@yyy]$ ./test
./test: error while loading shared libraries: libmylib.so: cannot open shared object file: No such file or directory

這個錯誤表明程序在運(yùn)行階段不能找到相應(yīng)的動態(tài)庫文件,此時需要通過環(huán)境變量 LD_LIBRARY_PATH 來指定運(yùn)行期動態(tài)庫的搜索目錄,我們的動態(tài)庫就在當(dāng)前目錄,如下:

[xxx@yyy]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

3)再次執(zhí)行測試程序
[leo@localhost debug]$ ./test
Segmentation fault
[leo@localhost debug]$ ls
libmylib.so main.c Makefile mylib.c mylib.h test

4)設(shè)置core文件大小
Segmentation fault如期而至,但是卻沒有我們更想見到的core文件!
原來系統(tǒng)在默認(rèn)情況下core文件的大小設(shè)置為0,換句話講也就是不產(chǎn)生core文件。我們可以通過 ulimit 命令來修改core文件的大小,unlimited表示不限制core文件的大小,如下(設(shè)置core文件的大小需要root權(quán)限):
[root@yyy]# ulimit -c unlimited
[root@yyy]# ./test
Segmentation fault (core dumped)
[root@yyy]# ls
core.2890 libmylib.so main.c Makefile mylib.c mylib.h test

5)設(shè)置core文件的格式,輸出路徑
通過下面命令我們還可以指定core文件的命名格式,路徑等(需要root權(quán)限):
[root@yyy]# echo "core_%e_%s" >/proc/sys/kernel/core_pattern
[root@yyy]# ./test
Segmentation fault (core dumped)
[root@yyy]# ls
core.2890 core_test_11.2898 libmylib.so main.c Makefile mylib.c mylib.h test

6)調(diào)試
[root@yyy]# gdb test core.2890
GNU gdb Red Hat Linux (6.5-8.fc6rh)
Copyright (C) 2006 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"...Using host libthread_db library "/lib/libthread_db.so.1".

Core was generated by `./test'.
Program terminated with signal 11, Segmentation fault.
Error while mapping shared library sections:
libmylib.so: Success.
Reading symbols from /home/xxx/tst/libmylib.so...done.
Loaded symbols for libmylib.so
Reading symbols from /lib/i686/libc.so.6...done.
Loaded symbols for /lib/i686/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
#0 0x00a8969c in ?? ()
(gdb)

鍵入GDB命令 where
(gdb) where
#0 0x001ec44c in ?? ()
#1 0x00000000 in ?? ()

?? ()并不是我們想看到的,之所以這樣,是因?yàn)镚DB不能正確加載我們編寫的動態(tài)庫libmylib.so,我們需要在這里設(shè)置GDB的動態(tài)庫搜索路徑,如下:

(gdb) set solib-search-path .
Reading symbols from /home/xxx/test/tst/libmylib.so...done.
Loaded symbols for /home/xxx/test/tst/libmylib.so
Reading symbols from /lib/i686/libc.so.6...done.
Loaded symbols for /lib/i686/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2

可以看到GDB已經(jīng)加載了libmylib.so,再次鍵入where命令:
(gdb) where
#0 0x001ec44c in add (x=10, y=20) at mylib.c:8
#1 0x0804847c in main () at main.c:12
(gdb)

這次我們期待的結(jié)果出現(xiàn)了,GDB清楚的列出了錯誤出現(xiàn)的位置:mylib.c的第8行,好了,到那里去改code吧!
posted on 2010-11-16 10:40 cooelaf 閱讀(1483) 評論(0)  編輯 收藏 引用 所屬分類: Linux
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产欧美精品xxxx另类| 久久国产精品黑丝| 欧美日韩国产不卡在线看| 久久精品国产99国产精品| 午夜在线a亚洲v天堂网2018| 亚洲伊人伊色伊影伊综合网| 亚洲理论在线| 亚洲一区二区三区四区中文 | 一区二区三区高清在线观看| 亚洲精品一区二区三区不| 夜夜夜久久久| 欧美一区二区三区在线观看 | 亚洲精美视频| 久久综合伊人77777| 久久人人爽人人| 亚洲国产高清aⅴ视频| 亚洲精品免费观看| 亚洲午夜91| 久久全国免费视频| 欧美日韩精品国产| 国产亚洲va综合人人澡精品| 亚洲国产成人精品女人久久久| 亚洲看片免费| 欧美一区二区日韩一区二区| 欧美顶级少妇做爰| 亚洲无线视频| 欧美激情视频网站| 国产视频在线观看一区二区三区| 亚洲区一区二区三区| 亚洲欧美日韩爽爽影院| 久久久久久亚洲精品杨幂换脸| 免费试看一区| 亚洲一区二区三区乱码aⅴ| 久久视频在线视频| 国产精品美女午夜av| 亚洲激情视频在线播放| 亚洲精品你懂的| 亚洲欧美资源在线| 亚洲黄页视频免费观看| 久久久久国产精品人| 国产精品每日更新| 夜夜嗨av一区二区三区网页| 亚洲高清视频在线| 久久久久久电影| 欧美激情自拍| 亚洲高清久久| 久久久久免费视频| 亚洲欧美综合国产精品一区| 欧美日韩久久| 亚洲精品久久久一区二区三区| 久久不射2019中文字幕| 亚洲午夜激情| 国产精品成人va在线观看| 亚洲激情视频网| 亚洲成色777777女色窝| 久久网站热最新地址| 精品二区久久| 免费国产自线拍一欧美视频| 欧美一级电影久久| 国产日韩欧美91| 久久精品一本| 欧美伊人久久久久久久久影院| 欧美性片在线观看| 中文一区字幕| 亚洲在线日韩| 国产真实乱子伦精品视频| 久久久精品国产99久久精品芒果| 亚洲欧美日韩国产综合| 国产午夜亚洲精品羞羞网站| 久久av在线| 久久精品国产久精国产思思| 国产亚洲精品久久久久婷婷瑜伽| 亚洲影院高清在线| 亚洲欧美成aⅴ人在线观看| 国产精品国色综合久久| 亚洲视频福利| 午夜精品999| 国产精品分类| 午夜久久久久久| 中文在线资源观看网站视频免费不卡 | 亚洲激情在线观看| 麻豆精品视频在线观看| 国产永久精品大片wwwapp| 午夜亚洲一区| 亚洲欧美中文日韩在线| 一本色道久久综合狠狠躁篇的优点 | 欧美激情一区二区在线 | 久久久久国产精品厨房| 亚洲国产日韩综合一区| 久久久久一区二区三区四区| 亚洲一二三四区| 欧美亚男人的天堂| 麻豆freexxxx性91精品| 久久久久.com| 在线播放一区| 久久久99爱| 久久综合五月| 亚洲美女黄色片| 亚洲看片免费| 国产精品日本一区二区| 欧美中文在线视频| 久久国产色av| 国产一级一区二区| 最新中文字幕亚洲| 国产精品爱啪在线线免费观看| 亚洲欧美成人| 欧美在线视频免费观看| 国内一区二区三区| 欧美黑人多人双交| 欧美日韩免费在线观看| 亚洲精品一区二区三区av| 亚洲亚洲精品在线观看| 国产自产2019最新不卡| 亚洲福利电影| 国产精品久久久亚洲一区| 欧美在线视频在线播放完整版免费观看 | 久久岛国电影| 在线观看国产成人av片| 另类天堂av| 国产精品国产福利国产秒拍| 久久久久久穴| 欧美日韩精品欧美日韩精品一 | 日韩视频在线一区| 欧美一区二区三区在线播放| 9i看片成人免费高清| 欧美一区二区三区日韩| 亚洲日本中文字幕| 亚洲影院色在线观看免费| 亚洲国产精品久久久久婷婷老年| 一区二区av| 亚洲国产一区二区三区青草影视| 日韩亚洲欧美成人一区| 在线视频观看日韩| 亚洲影视九九影院在线观看| 亚洲精品视频啊美女在线直播| 中文网丁香综合网| 99re亚洲国产精品| 久久亚洲春色中文字幕| 欧美一区二区视频免费观看| 欧美国产激情| 欧美一区二区三区在| 欧美午夜精品伦理| 亚洲激情电影中文字幕| 一区二区激情小说| 麻豆久久婷婷| 久久视频在线视频| 国产精品高清一区二区三区| 欧美大片91| 一区二区三区在线观看欧美| 亚洲国产一区二区三区a毛片| 欧美影院成人| 国产一区二区三区久久| 中文在线一区| 亚洲一区二区三区免费在线观看| 欧美不卡一区| 亚洲大片在线观看| 亚洲电影欧美电影有声小说| 欧美一区不卡| 欧美激情第8页| 亚洲欧洲在线视频| 欧美在线黄色| 久久亚洲一区二区| 狠狠噜噜久久| 久久综合成人精品亚洲另类欧美| 亚洲愉拍自拍另类高清精品| 国产日韩一区二区三区在线| 亚洲一级一区| 欧美影院精品一区| 国产欧美一区视频| 欧美一区网站| 欧美主播一区二区三区| 欧美激情麻豆| 亚洲欧美福利一区二区| 久久大综合网| 在线观看91精品国产麻豆| 久久久伊人欧美| 欧美激情一区二区三区在线视频观看| 亚洲第一视频网站| 久久久久99精品国产片| 99精品热视频| 久久精品二区| 亚洲国产精品久久久久秋霞影院| 欧美激情免费观看| 亚洲午夜在线视频| 亚洲一区二区网站| 91久久精品国产91久久性色tv| 欧美激情小视频| 亚洲深夜福利网站| 久久久精品欧美丰满| 亚洲国产精品一区| 国产精品草草| 欧美精品一区二区三| 亚洲一级黄色av| 另类欧美日韩国产在线| 在线亚洲国产精品网站| 国语自产偷拍精品视频偷| 久久精品欧美日韩| 午夜久久tv| 亚洲精品一级| 久久午夜精品一区二区|