linux shell 值coredump suid_dumpable和 gdb解析coredump文件

能夠設置產生coredump文件,設置dump文件命名非格式,生成dump文件的路徑;html

linuxmysql

# set suid_dumpable onlinux

 if [ -e /proc/sys/kernel/suid_dumpable ];sql

then   echo 1 > /proc/sys/kernel/suid_dumpableapp

 else   echo 1 > /proc/sys/fs/suid_dumpableui

 fi操作系統

 # create core directoryunix

 if [ -d $CORE_DUMP_DIR ];調試

then  htm

 echo $"$CORE_DUMP_DIR/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

 else

  mkdir $CORE_DUMP_DIR   

echo $"$CORE_DUMP_DIR/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

 fi

 # config sysctl to enable core

 grep "$CORE_DUMP_DIR/core-%e-%p-%t" /etc/sysctl.conf

 if [ $? -ne 0 ];

then  

 echo $"fs.suid_dumpable = 1" >> /etc/sysctl.conf  

 echo $"kernel.core_pattern = $CORE_DUMP_DIR/core-%e-%p-%t" >> /etc/sysctl.conf  

fi

 

1.core文件的生成開關和大小限制
---------------------------------
1)使用 ulimit -c  命令可查看core文件的生成開關。若結果爲0,則表示關閉了此功能,不會生成core文件。
2)使用 ulimit -c filesize   命令,能夠限制core文件的大小(filesize的單位爲kbyte)。
     若使用ulimit -c unlimited,則表示core文件的大小不受限制。
     若是生成的信息超過此大小,將會被裁剪,最終生成一個不完整的core文件。在調試此core文件的時候,gdb會提 示錯誤。

2.core文件的名稱和生成路徑
----------------------------
若系統生成的core文件不帶其它任何擴展名稱,則所有命名爲core。新的core文件生成將覆蓋原來的core文件。
1)/proc/sys/kernel/core_uses_pid能夠控制core文件的文件名中是否添加pid做爲擴展。
     文件內容爲1,表示添加pid做爲擴展名,生成的core文件格式爲core.xxxx;爲0則表示生成的core文件同一命名
     爲core。
     可經過如下命令修改此文件:
        echo
            "1" >
      /proc/sys/kernel/core_uses_pid
2)proc/sys/kernel/core_pattern能夠控制core文件保存位置和文件名格式。
     可經過如下命令修改此文件:
     echo
        "/corefile/core-%e-%p-%t" >
     core_pattern
   能夠將core文件統一輩子成到/corefile目錄下,產生的文件名爲core-命令名-pid-時間戳,如下是參數列表:  
   %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 添加致使產生core的信號
   %t - insert UNIX time that the coredump occurred into filename 添加core文件生成時的unix時間
   %h - insert hostname where the coredump happened into filename 添加主機名
   %e - insert coredumping executable name into filename添加命令名

3.用gdb查看core文件:
下面咱們能夠在發生運行時信號引發的錯誤時發生coredump了.
發生coredump以後,
用gdb進行查看core文件的內容,以定位文件中引起coredump的行.
gdb [execfile] [core file]
如:
gdb ./test test.core
在進入gdb後,
用bt命令查看backtrace以檢查發生程序運行到哪裏,來定位core dump的文件->行.
4.開發板上使用core文件調試
-----------------------------
若是開發板的操做系統也是linux,core調試方法依然適用。若是開發板上不支持gdb,可將開發板的環境(頭文件、庫)、可執行文件和core文件拷貝到PC的linux下,運行相關命令便可。
注意:待調試的可執行文件,在編譯的時候須要加-g,core文件才能正常顯示出錯信息!
注意的問題:
在Linux下要保證程序崩潰時生成Coredump要注意這些問題:
  1、要保證存放Coredump的目錄存在且進程對該目
錄有寫權限。存放Coredump的目錄即進程的當前目錄,通常就是當初發出命令啓動該進程時所在的目錄。但若是是經過腳本啓動,則腳本可能會修改當前目
錄,這時進程真正的當前目錄就會與當初執行腳本所在目錄不一樣。這時能夠查看」/proc/進程pid>/cwd「符號連接的目標來肯定進程
真正的當前目錄地址。經過系統服務啓動的進程也可經過這一方法查看。
  2、若程序調用了seteuid()/setegid()改變
了進程的有效用戶或組,則在默認狀況下系統不會爲這些進程生成Coredump。不少服務程序都會調用seteuid(),如MySQL,不論你用什麼用
戶運行mysqld_safe啓動MySQL,mysqld進行的有效用戶始終是msyql用戶。若是你當初是以用戶A運行了某個程序,但在ps裏看到的
這個程序的用戶倒是B的話,那麼這些進程就是調用了seteuid了。爲了可以讓這些進程生成core
dump,須要將/proc/sys/fs
/suid_dumpable文件的內容改成1(通常默認是0)。
  3、這個通常都知道,就是要設置足夠大的Core文件大小限制
了。程序崩潰時生成的Core文件大小即爲程序運行時佔用的內存大小。但程序崩潰時的行爲不可按日常時的行爲來估計,好比緩衝區溢出等錯誤可能致使堆棧被
破壞,所以常常會出現某個變量的值被修改爲亂七八糟的,而後程序用這個大小去申請內存就可能致使程序比日常時多佔用不少內存。所以不管程序正常運行時佔用
的內存多麼少,要保證生成Core文件仍是將大小限制設爲unlimited爲好。

 

本身編了一個股票監控軟件,有以下功能,有興趣的朋友能夠下載;

(1)   個股監測。監測個股實時變化,能夠監測個股大單交易、急速拉昇和降低、主力入場和出場、股票最高點和最低點提醒。檢測到最高點、最低點、主力進場點、主力退場點、急速拉昇點、急速下跌點,給出語音或者聲音提醒,不用再時刻看着大盤了,給你更多自由的時間;

(2)   大盤監測。監測大盤的走勢,採用上證、深證、創業三大指數的綜合指數做爲大盤走勢。並實時監測大盤的最高點和最低點、中間的轉折點。

(3)   股票推薦。還能根據歷史數據長期或短時間走勢進行分析,對股市3千多個股票進行分析對比,選出漲勢良好的股票,按照增加速度從大到小排序,推薦給你漲勢良好的股票;

下載地址:

1.0.3版本(修復大盤指數崩潰缺陷)下載地址:

連接:https://pan.baidu.com/s/1BJcTp-kdniM7VE9K5Kd3vg 提取碼:003h

更新連接:

https://www.cnblogs.com/bclshuai/p/10621613.html

相關文章
相關標籤/搜索