を出すにはどうしたらいいんですがコアダンプでLinuxをインストール.?

StackOverflow https://stackoverflow.com/questions/17965

質問

いプロセスのLinuxことになるってのセグメンテーション。どのように伝えれにコアダンプに失敗した場合に?

役に立ちましたか?

解決

このようにシェルされています。ご利用の場合はbashの場合、ulimitコマンド制御を複数設定に関するプログラム実行するかのようなすべきコアダンプす.した場合

ulimit -c unlimited

それを伝えてくれるbashはそのプログラムではコアダンプのサイズです。を指定することができサイズなどの52Mの代わりに無制限したい場合にも、実際にはこれないよう必要ならサイズのコアファイルされることがないでしょう課題です。

にtcshんの種類

limit coredumpsize unlimited

他のヒント

説明している上記の質問を求められていはこちらを有効にする方法については、コアダンプシステムの場合有効になります。この問いに答えます。

彼がここにい方を生成するコアダンプのための掛け、その答えは

gcore <pid>

まgcoreではご利用いただけませんシステムを

kill -ABRT <pid>

なkill-SEGVしていることはしばしば起動信号をハンドラは難しくして診断にこだわった程

なかにした添付ツールのプロセスの前で話し合ったのsegfaultし実行される generate-core-file コマンドです。することを余儀なくされ世代のコアダンプ

チェックのコアダンプが生成され、実行します:

sysctl kernel.core_pattern

または:

cat /proc/sys/kernel/core_pattern

場所 %e 工程名 %t システム。で変更することができ /etc/sysctl.conf や再読み込みによる sysctl -p.

場合にはコアファイルが生成されません(試験で: sleep 10 &killall -SIGSEGV sleep),インターネットオンライン: ulimit -a.

場合はコアファイルサイズが制限され実行します:

ulimit -c unlimited

で無制限になります。

そして試合のコアダンピングに成功すると、"コア捨て)"の区分の断層表示を下記の通りとなります。

Segmentation fault:11コア捨て)

参照: コア捨てがコアファイルは現在のディレクトリ?


Ubuntu

Ubuntuのコアダンプで取り扱ってい Apparmor に位置づけることができ /var/crash/.しかし、これはデフォルトでは無効に設定し安定したリリースなどで行っています。

詳しくは、こちらをご覧くださいチェック: なお、コアダンプUbuntu?.

macOS

理解度を深めるために、、 把握することになるコアダンプMac OS X?

みんなでこのように、このプログラムは、モノのトラップのセグメンテーション故障および貝殻をデバッガ(これはオリジナルのコードを使用 AIX や版画のスタックトレースのポイントのセグメンテーション。を変更する必要がありますの sprintf 変数の使用 gdb の場合はプログラムを利用しています。.

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <stdarg.h>

static void signal_handler(int);
static void dumpstack(void);
static void cleanup(void);
void init_signals(void);
void panic(const char *, ...);

struct sigaction sigact;
char *progname;

int main(int argc, char **argv) {
    char *s;
    progname = *(argv);
    atexit(cleanup);
    init_signals();
    printf("About to seg fault by assigning zero to *s\n");
    *s = 0;
    sigemptyset(&sigact.sa_mask);
    return 0;
}

void init_signals(void) {
    sigact.sa_handler = signal_handler;
    sigemptyset(&sigact.sa_mask);
    sigact.sa_flags = 0;
    sigaction(SIGINT, &sigact, (struct sigaction *)NULL);

    sigaddset(&sigact.sa_mask, SIGSEGV);
    sigaction(SIGSEGV, &sigact, (struct sigaction *)NULL);

    sigaddset(&sigact.sa_mask, SIGBUS);
    sigaction(SIGBUS, &sigact, (struct sigaction *)NULL);

    sigaddset(&sigact.sa_mask, SIGQUIT);
    sigaction(SIGQUIT, &sigact, (struct sigaction *)NULL);

    sigaddset(&sigact.sa_mask, SIGHUP);
    sigaction(SIGHUP, &sigact, (struct sigaction *)NULL);

    sigaddset(&sigact.sa_mask, SIGKILL);
    sigaction(SIGKILL, &sigact, (struct sigaction *)NULL);
}

static void signal_handler(int sig) {
    if (sig == SIGHUP) panic("FATAL: Program hanged up\n");
    if (sig == SIGSEGV || sig == SIGBUS){
        dumpstack();
        panic("FATAL: %s Fault. Logged StackTrace\n", (sig == SIGSEGV) ? "Segmentation" : ((sig == SIGBUS) ? "Bus" : "Unknown"));
    }
    if (sig == SIGQUIT) panic("QUIT signal ended program\n");
    if (sig == SIGKILL) panic("KILL signal ended program\n");
    if (sig == SIGINT) ;
}

void panic(const char *fmt, ...) {
    char buf[50];
    va_list argptr;
    va_start(argptr, fmt);
    vsprintf(buf, fmt, argptr);
    va_end(argptr);
    fprintf(stderr, buf);
    exit(-1);
}

static void dumpstack(void) {
    /* Got this routine from http://www.whitefang.com/unix/faq_toc.html
    ** Section 6.5. Modified to redirect to file to prevent clutter
    */
    /* This needs to be changed... */
    char dbx[160];

    sprintf(dbx, "echo 'where\ndetach' | dbx -a %d > %s.dump", getpid(), progname);
    /* Change the dbx to gdb */

    system(dbx);
    return;
}

void cleanup(void) {
    sigemptyset(&sigact.sa_mask);
    /* Do any cleaning up chores here */
}

き合いをさらに追加のパラメータにツールをダンプの中核ここに示されているようにこのブログ こちらの.

があるものに影響を及ぼ世代のコアダンプに出会ったことが、この

  • のディレクトリにダンプする必要書き込み可能.デフォルトでは、このメソッドは、現在のディレクトリの工程が変更することができる設定 /proc/sys/kernel/core_pattern.
  • 一部の条件は、カーネルの値 /proc/sys/fs/suid_dumpable のためにコアが生成されます。

ある状況が生成を防ぐことが出来ることはmanページかできない man core.

するためのコアダンプの

  1. /etc/profile コメントのライン:

    # ulimit -S -c 0 > /dev/null 2>&1
    
  2. /etc/security/limits.conf コメントしなくなったりします:

    *               soft    core            0
    
  3. cmdを実行し limit coredumpsize unlimited チェックでcmd limit:

    # limit coredumpsize unlimited
    # limit
    cputime      unlimited
    filesize     unlimited
    datasize     unlimited
    stacksize    10240 kbytes
    coredumpsize unlimited
    memoryuse    unlimited
    vmemoryuse   unlimited
    descriptors  1024
    memorylocked 32 kbytes
    maxproc      528383
    #
    
  4. チェックの場合はcorefileが記述でき殺しに関するプロセスcmd kill -s SEGV <PID> (べきではないが必要となっていない場合にはコアファイルが書きとして使用できますにチェック):

    # kill -s SEGV <PID>
    

一corefileてくを解除するにはcoredumpの再設定は、関連ファイル(1./2./3.) !

Ubuntu14.04

  1. チェックのコアダンプを有効に:

    ulimit -a
    
  2. 一つのメイン、サブニードル:

    core file size          (blocks, -c) unlimited
    
  3. ない場合は:

    gedit ~/.bashrc に追加 ulimit -c unlimited 末尾のファイルに保存し、再実行します。

  4. を用デバッグ情報:

    Makefile. -O0 -g

  5. 運用を創出するコアダンプ(コアダンプファイル名は'コア'を作るべきで近くapplication_nameファイル):

    ./application_name
    
  6. 下のツール:

    gdb application_name core
    

デフォルトではコアファイルです。することを確認して下さいに現在のディレクトリに書き込み可能、またはコアファイルを作成します。

より良いるコアダンププログラムを使用システムコール setrlimit.

例:

#include <sys/resource.h>

bool enable_core_dump(){    
    struct rlimit corelim;

    corelim.rlim_cur = RLIM_INFINITY;
    corelim.rlim_max = RLIM_INFINITY;

    return (0 == setrlimit(RLIMIT_CORE, &corelim));
}

待ちます。自動です。なしをしないようにする必要もあり

でも持ちの場合 systemd を設け、その後も少し異なります。の設定は、通常はコアファイルするパイプによる、 core_pattern sysctl価値を systemd-coredump(8).のコアファイルサイズrlimitは一般的にする設定が"無限"です。

その後は取得できるコアダンプを使用 coredumpctl(1).

の保存のコアダンプなど。よって構成されており coredump.conf(5).例はあるものに乗せるにはどうすればよいかにコアファイルのcoredumpctl manページが、このようになります:

のコアファイル:

[vps@phoenix]~$ coredumpctl list test_me | tail -1
Sun 2019-01-20 11:17:33 CET   16163  1224  1224  11 present /home/vps/test_me

のコアファイル:

[vps@phoenix]~$ coredumpctl -o test_me.core dump 16163
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top