あるプログラム(/usr/loca/bin/<prog_name>)を実行していたら、以下のエラーを吐いて、core dump したらしいです。
malloc(): memory corruption
Aborted (core dumped)
Ubuntu に詳しくないのですが、core ファイルがどこかにあるはずだ、と思い、/var/crash を探したりしても、ありません。
どういう仕組みになっているのか。。
どうやら、Ubuntu には、apport という仕掛けがあるらしいです。
要すれば、Ubuntu のパッケージであれば、そのエラーを捕捉して、Ubuntu のセキュリティチームに送信できる、みたいな仕組みで、RHEL にも、同様の仕組み(abrt)がありますよね。
で、ちょっと調べると、/var/log/apport.log というところに、ログが出力されているらしい、と。
executable does not belong to a package, ignoring
どうやら、Ubuntu パッケージに含まれていないプログラムだったために、core dumped となっているが、実際は、core dump されていないようです。
では、どうやったらいいのか。。
以下で出来ました。
# mkdir -p ~/.config/apport
# vim ~/.config/apport/settings
[main]
unpackaged=true
パッケージに含まれていないけど、よろしく、って意味でしょうかね。
また、core dump が吐かれるような動作をしてみたら、/var/crash 配下に、以下のようなファイル名のファイルが生成されていました。
フルパスで書きます。
/var/crash/_usr_local_bin_<prog_name>.0.crash
では、これが、CoreDump なのかというと、そうではありませんでした。
次のコマンドで、展開する必要があるようでした。
# apport-unpack /var/crash/_usr_local_bin_<prog_name>.0.crash exp
exp ディレクトリ内に、CoreDump ファイルを発見しました!
プログラムは、デバッグシンボル付きでコンパイルされていませんでしたが、何が起こったかぐらいは分かりました。
# gdb /usr/local/bin/<prog_name> CoreDump
...(snip)...
(gdb) bt
...(snip)...
#3 0x...... in malloc_printerr (Str=str@entry=0x...... "malloc(): memory corruption") at malloc.c:5342
...(snip)...
Signal というファイルを開くと、6 とありました。
(参考)
Apport ~Ubuntu のコアダンプ作成動作~
https://valinux.hatenablog.com/entry/20210721