« カウントダウン | Main | I, Robot »

2006年10月 2日

CrashReporterとcore dump

[ カテゴリ: MacOSX ]

ひょっとして常識かもしれないし、 あるいは、意外に知られてないかもしれないし、ってことで、 OSXでのCrashReporterとcore dumpについて。

クラッシュ・ダイアログでデバッグ情報を。

CrashReporterPrefs Developerでクラッシュ・レポート

アプリケーションを使っていると、

このアプリケーションは予期せず終了しました。

みたいなダイアログが出て終了することがありますね。 心の中で「ちっ」とか云いながら再起動したりするわけですが、 もしもそのアプリケーションが自分の開発したものだったりすると、 もうちょっと詳細なデバッグ情報が欲しくなるわけです。 そんなときは、CrashReporterPrefsで設定を変更しましょう。

$ open -a CrashReporterPrefs
$

これでDeveloperを選んでおくと、 アプリケーションが落ちたときに、 その原因とバックトレースが表示されるようになります。 ちなみに、バックグラウンドで動いているdaemonなんかでもレポートが来ます(たぶん)。

クラッシュのログをみたい

上記のダイアログは、最初は「おぉ」なんて思うかもしれませんが、 常用するにはうざすぎます。 そもそも「ふつーコマンドライン」と思う人には、 閉じるボタンを押さないと消えてくれないなんて邪魔以外の何者でもありません。

そんなときでも大丈夫。 実は、OSXでは何もしなくてもクラッシュをログに残しておいてくれるのです。 システム関係であれば/Library/Logs/CrashReporterに、 ユーザ権限で動いているものであれば~/Library/Logs/CrashReporterに、 それぞれクラッシュ・レポートが残っているはずです。 たまに見ると、 ATOK19がびしばし落ちている形跡なんかが残っていて驚愕できます。

core吐けよ、core

OSXでコードを書いていると、

「あれ?げろってるのにcoreないぞ」意味不明

なんてことはないでしょうか。 実は、OSXではcore dumpがデフォルトで無効になっているのです。 coreを吐かせるには、/etc/hostconfigに

COREDUMPS=-YES-

を追加して再起動してください。 きっと、/cores/core.### (###はpid)というファイルがたくさんできるでしょう。 え、できない? それは、シェルでリソース制限がかかってるんじゃないですか。

$ limit coredumpsize
coredumpsize    0kB
$ limit coredumpsize 100M
$ limit coredumpsize
coredumpsize    100MB
$

とかなんとか、どんなシェルでも大差はないと思うんですが、 まあシェルにあった方法でリソースを設定してあげてください。

ちなみにこれで吐いてくれるcoreファイル、Mach-Oだからかばかでかいです。 NetBSDなんかで吐かせている感覚でいくと大変です。 というわけで、実は実用的ではありません。 なので、現実的にはgdb使うことになるんだろうと思います。

Comments

Post a comment




Remember Me?