« 演奏会案内:ラ・フォル・ジュルネ金沢 | トップページ | 演奏会レポート:2009年3月20日、コンサート2題 »

Windowsのエラーダンプ解析

昨年の6月に設計を開始し、この2月で一応の完成を見たWindowsアプリケーションを、チームの人に試用してもらっていたところ、「特定の操作をするとアプリが落ちることがある」という報告を受けていました。しかも、一見したところ再現性がない、と。

最初は、ソースコードを読んでバグのありそうなところを一つづつ潰していき、怪しそうな部分にログ出力コードを埋め込み、非常にに怪しいと思われる部分をtry-catchで囲ってみたりしたものの、それでもアプリがクラッシュ(;_;)

で、最後の手段と思って、その名も「Windowsダンプの極意 エラーが発生したら、まずダンプ解析! 」なる本を買いました。

UNIX系OSであればcoreダンプはおなじみのはずで、10年ほど前に(私のキャリアの中で唯一)HP-UXのアプリを開発したとき、かなりお世話になったものですが、Windowsでも同じことができる、というわけです。

つまり、アプリがクラッシュしたときにダンプファイルを出力させ、そのファイルを後から(別のPCでもOk)解析してエラーの原因を突き止めるということが可能になるわけです。

解析に先立って、エラーダンプを解析するためのwindbgというデバッガをマイクロソフトからダウンロード&インストールしたり、リリースビルドでmapファイルを出力するようにVCプロジェクトを設定したり、ターゲットマシンでダンプファイルを出力する設定をしたり、といった準備をしておき、今朝、ダンプファイルをゲット。

昼過ぎまで別の作業があったので、午後3時ごろから解析開始。
windbgの使い方に慣れていないのと、スタックトレースを追いつつ逆アセンブルコードを眺めつつmapファイルを見て対応するソースコードを探したり、で2時間経過。

結果、WM_MOUSEMOVEイベントハンドラの中で落ちていることがわかり、後はソースコードレベルの解析に切り替え。さすがにソースコードレベルの解析は手馴れているので、コードを見た瞬間に「あちゃ~^^;」。
マウスカーソルが特定の場所にあるときに限ってちょっとしたデータ処理をする必要があり、データがゼロのときに処理してはいけないはずのところで処理を突っ走ってしまって不正なメモリ領域をアクセスしていた、というオチでした。

試用してもらっていた環境が「VistaにインストールしたVirtual PC上で動作するXP環境」だったので、その環境に特有の問題かと(根拠のない)推測をしていたのですが、何のことはない、(こう言うのもなんですが)ごく普通のバグでした(--;)

ともあれ、エラーダンプ解析はかなり有用だ、ということが身をもって分かりました。

|

« 演奏会案内:ラ・フォル・ジュルネ金沢 | トップページ | 演奏会レポート:2009年3月20日、コンサート2題 »

C/C++」カテゴリの記事

プログラミング」カテゴリの記事

日記」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/225253/44308679

この記事へのトラックバック一覧です: Windowsのエラーダンプ解析:

« 演奏会案内:ラ・フォル・ジュルネ金沢 | トップページ | 演奏会レポート:2009年3月20日、コンサート2題 »