锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浣滆咃細<leohe.leohe@gmail.com>
Linux緋葷粺涓湪搴旂敤紼嬪簭榪愯榪囩▼涓粡甯鎬細閬囧埌紼嬪簭紿佺劧宕╂簝錛屾彁紺猴細Segmentation
fault錛岃繖鏄洜涓哄簲鐢ㄧ▼搴忔敹鍒頒簡SIGSEGV淇″彿銆傝繖涓俊鍙鋒彁紺哄綋榪涚▼鍙戠敓浜嗘棤鏁堢殑瀛樺偍璁塊棶錛屽綋鎺ユ敹鍒拌繖涓俊鍙鋒椂錛岀己鐪佸姩浣滄槸錛氱粓姝/core銆?
緇堟w/core鐨勫惈涔夋槸錛氬湪榪涚▼褰撳墠鐩綍鐢熸垚core鏂囦歡錛屽茍灝嗚繘紼嬬殑鍐呭瓨鏄犺薄澶嶅埗鍒癱ore鏂囦歡涓紝core鏂囦歡鐨勯粯璁ゅ悕縐板氨鏄?#8220;core”錛堣繖鏄?
Unix綾葷郴緇熺殑涓涓敱鏉ュ凡涔呯殑鍔熻兘錛夈?br>
浜嬪疄涓婏紝騫朵笉鏄彧鏈塖IGSEGV淇″彿浜х敓coredump錛岃繕鏈変笅闈竴浜涗俊鍙蜂篃浜х敓coredump錛歋IGABRT錛堝紓甯哥粓姝級銆丼IGBUS錛堢‖浠?
鏁呴殰錛夈丼IGEMT錛堢‖浠舵晠闅滐級銆丼IGFPE錛堢畻鏈紓甯革級銆丼IGILL錛堥潪娉曠‖浠舵寚浠わ級銆丼IGIOT錛堢‖浠舵晠
闅滐級錛孲IGQUIT錛孲IGSYS錛堟棤鏁堢郴緇熻皟鐢級錛孲IGTRAP錛堢‖浠舵晠闅滐級絳夈?br>
鍦ㄧ▼搴忕殑寮鍙戣皟璇曢樁孌碉紙灝ゅ叾鏄ぇ鍨嬭蔣浠跺紑鍙戯級錛屽彂鐢熺▼搴忓紓甯稿穿婧冩椂甯歌鐨勮皟璇曟柟娉曞父甯告槸鏃犳瘮鐨勭棝鑻︼細鏃犵┓鐨刲og涓篃涓嶈寰楁湁浠涔堟湁鎰忎箟鐨勪俊鎭傚ソ鍦℅DB鎻愪緵鍜屽埄鐢╟ore鏂囦歡榪涜璋冭瘯鐨勯斿緞錛屽ぇ澶ф柟渚夸簡榪欑被闂鐨勮皟璇曘?br>
涓嬮潰鎴戜滑閫氳繃涓涓畝鍗曠殑渚嬪瓙鏉ョ湅鐪嬫庝箞閫氳繃GDB鏉ヨ皟璇曚竴涓繚瑙勮闂唴瀛樺鑷寸殑紼嬪簭宕╂簝銆傝繖閲屾垜浠『渚胯璁插姩鎬佸簱鐨勮皟璇曘?br>
/******** 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 ###############
棣栧厛灝嗕笂闈㈢殑浠g爜鍒嗗埆瀛樺偍鍒扮浉搴旂殑鐩綍,鍚嶇О涓猴細mylib.h銆乵ylib.c銆乵ain.c銆丮akefile銆?br>
1錛夌紪璇戞祴璇曚唬鐮併傛敞錛夌紪璇戞椂鐨?-g 閫夐」鏄繀欏葷殑銆?br>
[xxx@yyy]$ make
gcc mylib.c -g -I. -fPIC -shared -o libmylib.so
gcc main.c -g -I. -L. -lmylib -o t
閫氳繃ls鍛戒護鎴戜滑鍙互鐪嬪埌鐢熸垚浜嗘祴璇曠▼搴弔est.
[xxx@yyy]$ ls
libmylib.so main.c Makefile mylib.c mylib.h test
2錛夋墽琛屾祴璇曠▼搴?br>
[xxx@yyy]$ ./test
./test: error while loading shared libraries: libmylib.so: cannot open shared object file: No such file or directory
榪欎釜閿欒琛ㄦ槑紼嬪簭鍦ㄨ繍琛岄樁孌典笉鑳芥壘鍒扮浉搴旂殑鍔ㄦ佸簱鏂囦歡錛屾鏃墮渶瑕侀氳繃鐜鍙橀噺 LD_LIBRARY_PATH 鏉ユ寚瀹氳繍琛屾湡鍔ㄦ佸簱鐨勬悳绱㈢洰褰曪紝鎴戜滑鐨勫姩鎬佸簱灝卞湪褰撳墠鐩綍錛屽涓嬶細
[xxx@yyy]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
3錛夊啀嬈℃墽琛屾祴璇曠▼搴?br>
[leo@localhost debug]$ ./test
Segmentation fault
[leo@localhost debug]$ ls
libmylib.so main.c Makefile mylib.c mylib.h test
4錛夎緗甤ore鏂囦歡澶у皬
Segmentation fault濡傛湡鑰岃嚦錛屼絾鏄嵈娌℃湁鎴戜滑鏇存兂瑙佸埌鐨刢ore鏂囦歡錛?br>
鍘熸潵緋葷粺鍦ㄩ粯璁ゆ儏鍐典笅core鏂囦歡鐨勫ぇ灝忚緗負0錛屾崲鍙ヨ瘽璁蹭篃灝辨槸涓嶄駭鐢焎ore鏂囦歡銆傛垜浠彲浠ラ氳繃 ulimit 鍛戒護鏉ヤ慨鏀筩ore鏂囦歡鐨勫ぇ灝忥紝unlimited琛ㄧず涓嶉檺鍒禼ore鏂囦歡鐨勫ぇ灝忥紝濡備笅錛堣緗甤ore鏂囦歡鐨勫ぇ灝忛渶瑕乺oot鏉冮檺錛夛細
[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錛夎緗甤ore鏂囦歡鐨勬牸寮忥紝杈撳嚭璺緞
閫氳繃涓嬮潰鍛戒護鎴戜滑榪樺彲浠ユ寚瀹歝ore鏂囦歡鐨勫懡鍚嶆牸寮忥紝璺緞絳夛紙闇瑕乺oot鏉冮檺錛夛細
[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錛夎皟璇?br>
[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 ?? ()
?? ()騫朵笉鏄垜浠兂鐪嬪埌鐨勶紝涔嬫墍浠ヨ繖鏍鳳紝鏄洜涓篏DB涓嶈兘姝g‘鍔犺澆鎴戜滑緙栧啓鐨勫姩鎬佸簱libmylib.so錛屾垜浠渶瑕佸湪榪欓噷璁劇疆GDB鐨勫姩鎬佸簱鎼滅儲璺緞,濡備笅錛?br>
(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宸茬粡鍔犺澆浜唋ibmylib.so錛屽啀嬈¢敭鍏here鍛戒護錛?br>
(gdb) where
#0 0x001ec44c in add (x=10, y=20) at mylib.c:8
#1 0x0804847c in main () at main.c:12
(gdb)
榪欐鎴戜滑鏈熷緟鐨勭粨鏋滃嚭鐜頒簡錛孏DB娓呮鐨勫垪鍑轟簡閿欒鍑虹幇鐨勪綅緗細mylib.c鐨勭8琛岋紝濂戒簡錛屽埌閭i噷鍘繪敼code鍚э紒
]]>
stty pass8
鎵ц涓嬮潰鐨勫懡浠わ細
#export LC_CTYPE=iso-8859-1
鐒跺悗錛屽湪$HOME/.inputrc閲屽姞涓婁互涓嬭鍙ワ細
set output -meta on
淇敼涔嬪悗錛岀敤鎴蜂笉蹇呴噸鏂板惎鍔ㄧ郴緇燂紝鍙渶鏂板紑涓涓櫄鎷熺粓绔紝鎴栬呮敞閿鍚庡啀鐧誨綍鍗沖彲鐢熸晥銆?br>
錛堣漿杞借嚜http://developer.51cto.com/art/200509/3819.htm錛?/span>
]]>
]]>
淇敼/etc/inittab鏂囦歡銆傚皢id:5:initdefault: 涓殑5淇敼涓?錛岃〃紺轟笉榪涘叆X鐣岄潰銆?/p>
鍙嶄箣浜︾劧銆?/p>