Linuxシステムでコアダンプファイルが見つかりません。

Linuxシステムでコアダンプファイルが見つかりません。

1

私はコアダンプファイルを見つけようとしたときに似たトピックを見ましたが、どのソリューションも私に適しているようではありませんでした。誰かがデバッグを助けることができますか?私のアプリケーションは、コアダンプのために失敗したことを示す出力をログの最後に生成しますが、ファイルはどこにも生成されず、情報はログファイルに保持されません。

Linuxシステム:

NAME="Red Hat Enterprise Linux Server" VERSION="7.8 (Maipo)" ID="rhel" ID_LIKE="fedora" 前述のように、特定のリンクでいくつかの方法を試しました。

限界値

ulimit -c
unlimited

cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c %d %P %E

確認してみると、apフォルダが存在しないことがわかりました。

また、/tmpで始まる文字列で/proc/sys/kernel/core_patternを修正してみました。

echo "/tmp/cores/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern
/proc/sys/kernel/core_pattern: Read-only file system

現在、そのアクセス権がないので、rootとして実行すると機能しますか?

アプリケーションを実行しているディレクトリにもコアダンプファイルはありません。

また、次の点についてシステム全体を見てみました。

find / -name 'core*'


find / -name '*apport*'

また、他のフォルダも確認しました。

ls /var/cache/abrt
ls: cannot access /var/cache/abrt: No such file or directory
ls /var/crash
ls: cannot access /var/crash: No such file or directory
ls /var/spool/abrt
ls: cannot access /var/spool/abrt: No such file or directory
cat /var/log/apport.log
cat: /var/log/apport.log: No such file or directory

結果がない:

ls /var/lib/systemd/coredump/

次の解決策の場合:この問題を解決するには、apportがパッケージ以外のプログラムのコアダンプファイルも作成していることを確認する必要があります。これを行うには、次の内容で ~/.config/apport/settings というファイルを生成します。 [main] unpackaged=true

cd ~/.config/apport/
cd: /opt/front/arena/.config/apport/: No such file or directory

回避策:RHELでバイナリのコアダンプが欠落しており、使用する場合は、次のものを含める必要がありabrtます。/etc/abrt/abrt-action-save-package-data.confProcessUnpackaged = yes

cd /etc/abrt
cd: /etc/abrt: No such file or directory

どうやら選択の余地がないようです。ありがとう

答え1

$ ulimit -c
unlimited

これはいいですね。権限の問題がない限り、コアファイルはサイズ制限なしで生成されます。このコマンドが表示されない場合は、を使用unlimitedして値を変更できますulimit -c unlimited

$ cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c %d %P %E

apportこの設定はコアファイルをプログラム(インストールされていません)にリダイレクトするため、ディスクにコアファイルが必要な場合は望ましくありません。

以前と同様に、この設定を手動で変更できますが、管理者権限が必要です。 rootとしてログインし、次のコマンドを使用してcore_patternファイルを変更します。

echo /tmp/cores/core.%e.%p.%h.%t > /proc/sys/kernel/core_pattern

...または以下を使用してくださいsudo

echo /tmp/core.%e.%p.%h.%t | sudo dd of=/proc/sys/kernel/core_pattern

最良の方法は次のとおりです。sysctl:

sudo sysctl -w kernel.core_pattern=/tmp/cores/core.%e.%p.%h.%t

通常/etc/sysctl.conf、適切に編集してこの変更を永久に適用できます。

Read-only file system注:ファイルの内容を変更しようとすると、次の問題が発生することがわかりました。 proc FSが読み取り専用でマウントされているようです。以下を変更する前に、読み取り/書き込み権限で再マウントする必要があります/proc

sudo mount -o remount,rw /proc

それはすべてです。これで、要件に応じてコアファイルが/ tmpに生成されます。 Bashを使用して次のようにテストできます。

$ sleep 3 & kill -SEGV $!
[1] 4604
[1]+  Segmentation fault      sleep 3

$ ls /tmp/core*

コアファイルに関する追加情報man 5 core

関連情報