欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
在Linux下產(chǎn)生并調試core文件

在Linux下產(chǎn)生并調試core文件

(原出處:http://www.cnblogs.com/stable/archive/2010/10/31/1865511.html)

先看看我用的是個(gè)什么機器:

$ uname -a
Linux dev 2.4.21-9.30AXsmp #1 SMP Wed May 26 23:37:09 EDT 2004 i686 i686 i386 GNU/Linux

再看看默認的一些參數,注意core file size是個(gè)0,程序出錯時(shí)不會(huì )產(chǎn)生core文件了。

$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) 4
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 7168
virtual memory (kbytes, -v) unlimited

寫(xiě)個(gè)簡(jiǎn)單的程序,看看core文件是不是會(huì )被產(chǎn)生。

$ more foo.c

#include <stdio.h>

static void sub(void);

int main(void)
{
    sub();
    return 0;
}

static void sub(void)
{
    int *p = NULL;

    /* derefernce a null pointer, expect core dump. */
    printf("%d", *p);
}

$ gcc -Wall -g foo.c
$ ./a.out
Segmentation fault

$ ls -l core.*
ls: core.*: No such file or directory

沒(méi)有找到core文件,我們改改ulimit的設置,讓它產(chǎn)生。1024是隨便取的,要是core文件大于1024個(gè)塊,就產(chǎn)生不出來(lái)了。

$ ulimit -c 1024

$ ulimit -a
core file size (blocks, -c) 1024
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) 4
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 7168
virtual memory (kbytes, -v) unlimited

$ ./a.out
Segmentation fault (core dumped)
$ ls -l core.*
-rw------- 1 uniware uniware 53248 Jun 30 17:10 core.9128

注意看上述的輸出信息,多了個(gè)(core dumped)。確實(shí)產(chǎn)生了一個(gè)core文件,9128是該進(jìn)程的PID。我們用GDB來(lái)看看這個(gè)core。

$ gdb --core=core.9128
GNU gdb Asianux (6.0post-0.20040223.17.1AX)
Copyright 2004 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-asianux-linux-gnu".
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x08048373 in ?? ()
(gdb) bt
#0 0x08048373 in ?? ()
#1 0xbfffd8f8 in ?? ()
#2 0x0804839e in ?? ()
#3 0xb74cc6b3 in ?? ()
#4 0x00000000 in ?? ()

此時(shí)用bt看不到backtrace,也就是調用堆棧,原來(lái)GDB還不知道符號信息在哪里。我們告訴它一下:

(gdb) file ./a.out
Reading symbols from ./a.out...done.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) bt
#0 0x08048373 in sub () at foo.c:17
#1 0x08048359 in main () at foo.c:8

此時(shí)backtrace出來(lái)了。

(gdb) l
8         sub();
9         return 0;
10     }
11
12     static void sub(void)
13     {
14         int *p = NULL;
15
16         /* derefernce a null pointer, expect core dump. */
17         printf("%d", *p);
(gdb)

 

在程序不尋常退出時(shí),內核會(huì )在當前工作目錄下生成一個(gè)core文件(是一個(gè)內存映像,同時(shí)加上調試信息)。使用gdb來(lái)查看core文件,可以指示出導致程序出錯的代碼所在文件和行數。


1.core文件的生成開(kāi)關(guān)和大小限制
---------------------------------
 1)使用ulimit -c命令可查看core文件的生成開(kāi)關(guān)。若結果為0,則表示關(guān)閉了此功能,不會(huì )生成core文件。
 2)使用ulimit -c filesize命令,可以限制core文件的大?。╢ilesize的單位為kbyte)。若ulimit -c unlimited,則表示core文件的大小不受限制。如果生成的信息超過(guò)此大小,將會(huì )被裁剪,最終生成一個(gè)不完整的core文件。在調試此core文件的時(shí)候,gdb會(huì )提示錯誤。


2.core文件的名稱(chēng)和生成路徑
----------------------------
core文件生成路徑:
輸入可執行文件運行命令的同一路徑下。
若系統生成的core文件不帶其他任何擴展名稱(chēng),則全部命名為core。新的core文件生成將覆蓋原來(lái)的core文件。

1)/proc/sys/kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作為擴展。文件內容為1,表示添加pid作為擴展名,生成的core文件格式為core.xxxx;為0則表示生成的core文件同一命名為core。
可通過(guò)以下命令修改此文件:
echo "1" > /proc/sys/kernel/core_uses_pid

2)proc/sys/kernel/core_pattern可以控制core文件保存位置和文件名格式。
可通過(guò)以下命令修改此文件:
echo "/corefile/core-%e-%p-%t" > core_pattern,可以將core文件統一生成到/corefile目錄下,產(chǎn)生的文件名為core-命令名-pid-時(shí)間戳
以下是參數列表:
    %p - insert pid into filename 添加pid
    %u - insert current uid into filename 添加當前uid
    %g - insert current gid into filename 添加當前gid
    %s - insert signal that caused the coredump into the filename 添加導致產(chǎn)生core的信號
    %t - insert UNIX time that the coredump occurred into filename 添加core文件生成時(shí)的unix時(shí)間
    %h - insert hostname where the coredump happened into filename 添加主機名
    %e - insert coredumping executable name into filename 添加命令名


3.core文件的查看
-----------------
 core文件需要使用gdb來(lái)查看。
 gdb ./a.out
 core-file core.xxxx
 使用bt命令即可看到程序出錯的地方。
以下兩種命令方式具有相同的效果,但是在有些環(huán)境下不生效,所以推薦使用上面的命令。
1)gdb -core=core.xxxx
file ./a.out
bt
2)gdb -c core.xxxx
file ./a.out
bt


4.開(kāi)發(fā)板上使用core文件調試
-----------------------------
如果開(kāi)發(fā)板的操作系統也是linux,core調試方法依然適用。如果開(kāi)發(fā)板上不支持gdb,可將開(kāi)發(fā)板的環(huán)境(依賴(lài)庫)、可執行文件和core文件拷貝到PC的linux下。
在 PC上調試開(kāi)發(fā)板上產(chǎn)生的core文件,需要使用交叉編譯器自帶的gdb,并且需要在gdb中指定solib-absolute-prefix和 solib-search-path兩個(gè)變量以保證gdb能夠找到可執行程序的依賴(lài)庫路徑。有一種建立配置文件的方法,不需要每次啟動(dòng)gdb都配置以上變量,即:在待運行g(shù)db的路徑下建立.gdbinit。
配置文件內容:
set solib-absolute-prefix YOUR_CROSS_COMPILE_PATH
set solib-search-path YOUR_CROSS_COMPILE_PATH
set solib-search-path YOUR_DEVELOPER_TOOLS_LIB_PATH
handle SIG32 nostop noprint pass



1. core文件的簡(jiǎn)單介紹
在一個(gè)程序崩潰時(shí),它一般會(huì )在指定目錄下生成一個(gè)core文件。core文件僅僅是一個(gè)內存映象(同時(shí)加上調試信息),主要是用來(lái)調試的。  
2. 開(kāi)啟或關(guān)閉core文件的生成
用以下命令來(lái)阻止系統生成core文件:
ulimit -c 0
下面的命令可以檢查生成core文件的選項是否打開(kāi):
ulimit -a
該命令將顯示所有的用戶(hù)定制,其中選項-a代表“all”。也可以修改系統文件來(lái)調整core選項
在/etc/profile通常會(huì )有這樣一句話(huà)來(lái)禁止產(chǎn)生core文件,通常這種設置是合理的:
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
但是在開(kāi)發(fā)過(guò)程中有時(shí)為了調試問(wèn)題,還是需要在特定的用戶(hù)環(huán)境下打開(kāi)core文件產(chǎn)生的設置
在用戶(hù)的~/.bash_profile里加上ulimit -c unlimited來(lái)讓特定的用戶(hù)可以產(chǎn)生core文件
如果ulimit -c 0 則也是禁止產(chǎn)生core文件,而ulimit -c 1024則限制產(chǎn)生的core文件的大小不能超過(guò)1024kb  
3. 設置Core Dump的核心轉儲文件目錄和命名規則
/proc/sys/kernel/core_uses_pid可以控制產(chǎn)生的core文件的文件名中是否添加pid作為擴展,如果添加則文件內容為1,否則為0
/proc/sys/kernel/core_pattern可以設置格式化的core文件保存位置或文件名,比如原來(lái)文件內容是core-%e
可以這樣修改:
echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
將會(huì )控制所產(chǎn)生的core文件會(huì )存放到/corefile目錄下,產(chǎn)生的文件名為core-命令名-pid-時(shí)間戳
以下是參數列表:
    %p - insert pid into filename 添加pid
    %u - insert current uid into filename 添加當前uid
    %g - insert current gid into filename 添加當前gid
    %s - insert signal that caused the coredump into the filename 添加導致產(chǎn)生core的信號
    %t - insert UNIX time that the coredump occurred into filename 添加core文件生成時(shí)的unix時(shí)間
    %h - insert hostname where the coredump happened into filename 添加主機名
    %e - insert coredumping executable name into filename 添加命令名  
4. 使用core文件
在core文件所在目錄下鍵入:
gdb -c core
它會(huì )啟動(dòng)GNU的調試器,來(lái)調試core文件,并且會(huì )顯示生成此core文件的程序名,中止此程序的信號等等
如果你已經(jīng)知道是由什么程序生成此core文件的,比如MyServer崩潰了生成core.12345,那么用此指令調試:
gdb -c core MyServer
以下怎么辦就該去學(xué)習gdb的使用了  
5. 一個(gè)小方法來(lái)測試產(chǎn)生core文件
直接輸入指令:
kill -s SIGSEGV $$

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
linux core文件 ulimit調試程序。
core dump
linux core文件機制 - sihanjishu的個(gè)人空間 - 51Testing軟...
學(xué)會(huì )用core dump調試程序錯誤
段錯誤調試神器 - Core Dump詳解
打開(kāi)系統core dump及其配置
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久