Ubuntu で CoreDump を取得する
如果执行了一个程序(/usr/loca/bin/),据说会抛出以下错误并导致核心转储。
malloc(): memory corruption
Aborted (core dumped)
Ubuntu に詳しくないのですが、core ファイルがどこかにあるはずだ、と思い、/var/crash を探したりしても、ありません。
どういう仕組みになっているのか。。
どうやら、Ubuntu には、apport という仕掛けがあるらしいです。
如果需要的话,Ubuntu有一种机制可以捕捉到错误,并将其发送给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核心转储生成操作~
请参考以下链接了解有关Apport在Ubuntu操作系统中生成核心转储的操作:https://valinux.hatenablog.com/entry/20210721