Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> 説明:セグメンテーションエラーが発生したとき、Linuxシステムはコアファイルをどのように生成しますか。

説明:セグメンテーションエラーが発生したとき、Linuxシステムはコアファイルをどのように生成しますか。

  


システムコアダンプ機能が有効になっていると、LinuxのCプログラムはメモリアクセスエラーなどによりセグメントエラーを引き起こすことがよくあります。開いて、そしてハードディスクにダンプされたメモリイメージがあるでしょう、そしてあなたはコアファイルを分析するためにgdbを使うことができ、システムにセグメンテーションエラーがある時にスタック状況を復元することができます。これはプログラムのバグを見つけるのにとても役立ちます。
システムのコアファイルのサイズ制限を表示するには、ulimit -aを使用し、システムで生成できるコアファイルのサイズを設定するには、ulimit -cを使用します(例:ulimit -c 0は、コアファイルを生成しません)。 c 100コアファイルを最大100kに設定します。
ulimit -c unlimitedコアファイルのサイズを制限しないでください。
セグメンテーションエラーの原因となるプログラムを調べてください。
#include
int main()
{< Br> char * ptr =" linuxers.cn";
* ptr = 0;
}
コンパイルと実行の結果は次のとおりです。
[leconte @ localhost test] $ gcc -g -o test Ac
[leconte @ localhost test] $ ./test
Segment Error
現時点ではコアファイルは生成されていないので、ulimit -cを使用してコアファイルのサイズを無制限に設定してから、。/testプログラムを実行します。結果は次のようになります。
[leconte @ localhost〜] $ ulimit -a
コアファイルサイズ(ブロック数、-c)0
[leconte @ localhostテスト] $ ulimit -c unlimited
[leconte @ローカルホストテスト] $ ulimit -a
コアファイルサイズ(ブロック、-c)無制限
[leconte @ localhostテスト] $ ./test
セグメントダンプ(コアダンプ)
[leconte @ loc] Alhostテスト] $ ls -al core。* 1 - lew ------- 1 leconte leconte 139264 01-06 22:31 core.2065
目に見えるコアファイルが生成され、その後gdb分析、スタックの状況を参照してください。
[leconte @ localhost test] $ gdb ./test core.2065
GNU gdb Fedora(6.8-27.el5)
Copyright(C)2008 Free Software Foundation、Inc. < Br>ライセンスGPLv3 +:GNU GPLバージョン3以降
これはフリーソフトウェアです:あなたは自由に変更して再配布することができます。
法律で認められている範囲では一切の保証はありません。詳細については、Br>および"保証の表示"をご覧ください。
このGDBは" i386-redhat-linux-gnu"として設定されています。...
warning:execファイルはcoreファイルよりも新しいものです。ロードマップのパス名を読み込めません:入出力エラー。/lib/libc.so.6...doneからのシンボルの読み取り

/lib/libc.so.6のシンボルの読み込み
/lib/ld-linux.so.2...doneからシンボルを読み取る
/lib/ld-linux.so.2のロードされたシンボル
コアは `./test 'によって生成されました。
プログラム期間シグナル11、セグメンテーションエラーが発生しています。
[新しいプロセス2065]
#0 0x0804836f in ac(6)
6 * ptr = 0;
上記の出力から明らかですセグメンテーションエラーがacの6行目で発生し、問題は明確に突き止められました。
多くのシステムデフォルトコアファイルサイズは0です、コアスタートアップファイルが確実に実行できるように、シェルの起動スクリプト/etc /bashrcまたは〜/.bashrcなどにulimit -cコマンドを追加してコアファイルサイズを指定できます。生成されました。
また、/proc /sys /kernel /core_patternにコアファイルのファイル名テンプレートを設定することもできます詳細については、コアの公式manページを参照してください。

Copyright © Windowsの知識 All Rights Reserved