Linuxのコア・ダンプベンは、診断プロセスを敗走しました

       問題の最近のプロジェクトには、サーバー側のプログラムが突然崩壊終了します、我々は、プロセスが実行されているときに、関数の終了を決定した、クラッシュの原因を見つけるために、コアダンプ技術を取っている、どのようにその状態です。
       システムは、現在のシェル環境がコアダンプを開いた場合、シェル環境の崩壊を終了するには、現在のプログラムの下で、その後、スタックメモリの状態を処理すると言うことは、正確なコアダンプ、オンになっている場合にコアファイルを書かれています。GDBを使用することで、コアのa.out GDBをスタックのコア状態で保存したファイルを表示することができます。(オープンシェルへのコアダンプの理解、私の別のブログ「GDB観測スタックメモリのレイアウト」を参照してGDBについて「オープンコアダンプによって引き起こされるシェルの詳細な探査」を参照してください)
       生成されたコアファイルの位置を:デフォルトのコアに、実行可能ファイルの場所が配置されている名前は、デフォルトで、その場所と名前は私がに設定され、設定することができ
                                                                                            ます。mkdir /ホーム/ COREFILE
- %%%のp-Tエコー「/ホーム/コアファイル/ E-コア「>は、/ proc / sys / kernel / core_pattern
       したがって、生成されたファイルがディレクトリCOREFILE /コア/ホームに配置され、コアのファイル名は、コア- %E-%のp-%T、%eは表しの形で表示されます実行可能ファイルの名前は、%pは%tは時間(UNIX時間に注意してください)コアファイルを生成表し、プロセスを意味します。
       ここにつながる可能コアダンプルーチンは、次のとおりです。

する#include <stdio.hの>
int型の正方形(INTA、INT B){
    int型RET。
    int型* p = NULL;
    * P = 666。
    RETを返します。
}
doCalc(intnum1、INT NUM2){int型
    INT RET =正方形(NUM1、NUM2)を、
    RETを返します。
}
int型のmain(){
    int型PARAM1 = 1。
    int型PARAM2 = 2;
    INT結果= doCalc(PARAM1、PARAM2)。
    printf( "結果は%Dを\ nである"結果)。
}

       コアダンプの場所につながる組みます。次のファイルは/ home /コアファイルディレクトリの下に実行された後に生成されます:
[ルート@ localhostwin7]#のLS /ホーム/コアファイル/
 
 
 
 
コアa.outの-5082から1490760381
 
 
 
 
a.outが1490760381には、ドキュメントのUNIX時間を生成することで、5082はPIDで、実行可能ファイル名です。:a.outのコアファイルディレクトリで、コマンドを使用し
、GDBのa.outコア-a.outという-5082から1490760381は
その後、GDBを入力し、バックトレースコマンドを使用して、プロセスが終了すると、あなたはスタックメモリの状態を見ることができ、次のように下記:

(GDB)BT
gdbtest.cppに正方形で#0 0x00000000004005ba(A = 1、B = 2):7
#1 doCalcで0x00000000004005e2(NUM1 = 1、NUM2 = 2)gdbtest.cppで:12
#主に2 0x000000000040060f( )gdbtest.cpp時:19

       プロセスが終了したときに目に見える、関数の最後の実行は、正方形の関数です。
---------------------
著者:yunlong32
出典:CSDN
オリジナルます。https://blog.csdn.net/u014585564/article/details/68063269
免責事項:この記事ブロガーのオリジナルの記事、複製など、ボーエンのリンクを添付してください!

おすすめ

転載: www.cnblogs.com/xibuhaohao/p/11060200.html