« カウントダウン | Main | I, Robot »
2006年10月 2日
CrashReporterとcore dump
ひょっとして常識かもしれないし、 あるいは、意外に知られてないかもしれないし、ってことで、 OSXでのCrashReporterとcore dumpについて。
クラッシュ・ダイアログでデバッグ情報を。
|
|
アプリケーションを使っていると、
このアプリケーションは予期せず終了しました。
みたいなダイアログが出て終了することがありますね。 心の中で「ちっ」とか云いながら再起動したりするわけですが、 もしもそのアプリケーションが自分の開発したものだったりすると、 もうちょっと詳細なデバッグ情報が欲しくなるわけです。 そんなときは、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使うことになるんだろうと思います。

