Linuxではどのようにcore dumpファイルを生成しますか?

3693 ワード

転載する
http://blog.csdn.net/li_yang 98/articale/detail/3261211
C/C++言語開発プログラムを使用すると、プログラムcrash時にcore dumpファイルを作成することがデバッグプログラムにとても役立ちます。Redhat Linuxシステムでは、デフォルトではcore dumpファイルは生成されません。
ulimit-S-c 0'/dev/null 2'&1
どうやってcore dumpを開けますか?一番簡単な方法はユーザーが自分のところにいることです。profileにulimit-S-c unlimited-/dev/null 2>&1を追加すると、現在のユーザにサイズ制限のないcore dumpファイルを生成することができます。また、二つのシステムレベルでcore dumpを生成する方法があります。一つ目の方法は修正/etc/profileで、ulimitの一行を
〹vim/etc/profile
ウードulimit-S-c unlimited-/dev/null 2>&1
このように設定すると、システムは、全ユーザにサイズ制限のないcore dumpファイルを生成させることができる。このようにする利点は、システムを再起動する必要がないということであり、一部のユーザにのみcore dumpファイルを生成させることができないという点である。二つ目の方法は修正/etc/security/limits.com nfファイルです。多くのシステムの上限はこのファイルを修正することによって変更できます。一番大きなプロセスの個数、最大開くファイルの数などです。このファイルには詳しい注釈があります。このファイルをどうやって修正するかについて説明しました。すべてのユーザーにcore dumpを開きたいなら、一行に参加してもいいです。
*ソフトコール0
いくつかのユーザーまたはユーザーグループに対してのみcore dumpを開くと、参加できます。
user soft core 0または@group soft core 0
注意/etc/security/limits.com nfファイルを修正することでcore dumpを開く場合は、その行を注釈する必要があります。
ウードulimit-S-c 0'/dev/null 2'&1
このように修正された利点は、特定のユーザまたは特定のグループに対してcore dumpファイルを開くことができ、システムを再起動する必要があるという点である。
最後にcore dumpファイルを生成する位置について説明します。デフォルトの位置は実行可能なプログラムと同じディレクトリにあり、ファイル名はcore.***であり、その中の***は数字です。core dumpファイル名のパターンは/proc/sys/kersnel/coree_に保存されます。patternのうち、デフォルト値はcoreです。core dumpファイルの位置は以下のコマンドで変更できます。
echo'/tmp/cores/core'/proc/sys/ケネル/corepattern
 
 1 #include <stdio.h>

 2 #include <stdlib.h>

 3 #include <string.h>

 4 #include <sys/types.h>

 5 #include <fcntl.h>

 6 #include <dirent.h>

 7 #include <unistd.h>

 8 

 9 int main(int argc, char** argv)

10 {

11     int* p;

12     int pid;

13 

14     pid = getpid();

15     printf("%d
", pid); 16 17 scanf("%d", p); 18 19 return 0; 20 }
咻gcc main.cn-o ap mail.c-o app.co app芫菚/ap 79057; Segmentation fault(core dumped)咻ls core.7777 core.907
 coree.xxxの中のxxxはプロセス番号を表しています。