2

アプリケーション/スレッドに SIGSEGV==11 がある場合に、FreeBSD に強制的にコア ファイルを生成させることは可能ですか?

これを実行しているアプリケーションがありますが、それはスレッドの 1 つが死んでいるだけであり、実行可能ファイルは実行されたままです。

この実行可能ファイルはサービスとして実行されています - ファイルはどこにありますか? コア ファイルを強制的に /tmp などに表示させることはできますか?

ありがとう

4

5 に答える 5

2

探しているマンページは core(5) です。kern.corefile を、書き込みアクセス権があり、十分なスペースがあることが確実な場所に設定することをお勧めします。

于 2012-07-06T08:39:36.370 に答える
1

なに

# sysctl kern.coredump

出力?0 の場合は、1 に設定する必要があります。つまり、

# sysctl kern.coredump=1
于 2012-08-01T13:27:05.707 に答える
1

によるとman signal、SIGSEGV は常にコア ファイルを生成する必要があります。

ただし、コア ファイルは現在の作業ディレクトリに生成されます。これは多くの場合、プロセスが開始されたときの作業ディレクトリです。そして、この振る舞いを変えることはできないと確信しています。一部のプログラムは、バイナリを起動する前に作業ディレクトリを変更するシェル スクリプトによって起動されるため、シェル スクリプトを変更することで影響を与えることができることに注意してください。

ハンドブックのデバッグ セクションによると、実行中のプロセスに GDB をアタッチすることもできます。

のような中央の場所でコア ファイルを収集したい場合は/tmp、cron で次のように実行できます。

find ~ -name '*.core' -exec mv {} /tmp \;
于 2012-07-03T19:30:52.463 に答える
0

Linux でこの問題が発生した場合、ulimit -c unlimited が設定されているかどうかを確認します。これは FreeBSD にも当てはまるかもしれません。これを参照してください: Linux C++ プログラムでコア ダンプを有効にする方法

強制終了するプロセスの pid を取得します。

ps -ef | grep プロセス名

次のようなものが得られます。

user    PID  TID  0 etc

kill -6 PID

プロセスが停止していることを確認し、これを再度実行してください。以前のようにプロセスが表示されることはありません。

ps -ef | grep PID

于 2012-07-03T20:57:45.943 に答える
0

はい、これは可能です。

#include <sys/resource.h>

// core dumps may be disallowed by parent of this process; change that
struct rlimit core_limits;
core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY;
setrlimit(RLIMIT_CORE, &core_limits);

また、セットアップ システムのコアダンプ フォルダーを好む

# FreeBSD
mkdir -p /var/coredumps
chmod 777 /var/coredumps                        # for "kern.sugid_coredump=1"
sysctl kern.corefile=/var/coredumps/%U/%N.core
sysctl kern.coredump=1                          # default

詳細については、core(5)およびsetrlimit(2)を参照してください。

于 2017-03-22T06:54:27.643 に答える