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

广告
将在 10 秒后关闭
bannerAds