トップ «前の日記(2008-11-27) 最新 次の日記(2008-11-29)» 編集

日々の破片

著作一覧

2008-11-28

_ ダンプの極意

Windowsダンプの極意をアスキーの嘉平さんから一昨日もらって、電車の中でほぼ読んだ。

取りあえず職場用に一冊購入を要求して、さらに教育用資料として幾つかの計画をしたり。

という具合に実用的な本だ。

読者としての僕について言えば、かれこれ10年以上(最近数年は離れているけど)ワトソン博士が出力したスタックトレースを追っかけたり、場合によってはヒープのダンプを眺めてポインタが破壊された状況を追っかけたり、さらにその方法をOJTしたりはしているから、その意味では前半と後半は、それほど目新しいことはない。

が、それをきちんと言語化してあるのは実に良い。しかも、読みやすい。良い意味で現場的な言葉遣いと順序を追って書かれているからだ。

Windowsで開発したりサポートしたりしている人で、ダンプを見たことがなければ必読、そうでなくてもいまいち追い切れなかったことがあればほぼ必読、内部追っかけ系の本が好きなら読み応えあり、という本だ。僕の感覚では、Windowsが手元にあるのなら、コンピュータはなぜ動くか系の本より、こっち読んだほうが良いのではないかなぁ。

本の造りを説明すると、最初は、ダンプを解析するというのはどういうことかの説明から始って、その前提知識としてCPUとOSの動作、API、レジスタの役割、割り込みやプロセスとスレッド、ハンドル、といった基礎知識が良いテンポで、のめりこまないけど必要な程度の塩梅で説明される。

次に、デバッガのインストールやダンプの種類、ダンプを取得する設定の方法、OSごとの使えるツールやコマンド(このあたりになると知らないことも出てきて、僕にとっては知識の更新の役にえらくたった)、ダンプの読み方と来る。

最初は、当然のように、スタックの人間バックトレースの方法を説明。例をきちんと作ってあるのでわかりやすいから、いきなりOJTより、まずこれを読むのは正解だろうなぁ(もちろんプログラムであれば自分の良く知っているプログラムをデバッガで追えば良いわけだけど、この本のターゲットはプログラマとは限定せずダンプ解析者だから、この説明は良いと思う)。

そして、分岐したりすると追うのがやっかいになるのは当然、というあたりでフラグレジスタの説明と分岐命令の説明、そしてなぜかヒープ(とカーネルメモリでのプール)の説明。

このあたりで全体の1/3強というところ。

そして、STOPエラーの場合の調べ方、OSがフリーズした場合の調べ方、アプリケーションエラー、アプリケーションのハングアップ、パフォーマンス低下と事象単位にどう調べるかについて、パターン別の説明。たとえばアプリケーションエラーなら、ヒープ破壊、スタック破壊(確かにこの2つだな)、ハングアップなら、デッドロック、ループ、というように分類して説明がある。で、ハングアップの場合、ループは約1割に満たないとか、著者のサポート経験からのざっくりした感覚が書かれているのだが、これ、相当確度が高そうに(経験と照らし合わせて)思えるから、そのあたりもいい。このパートが全体の1/3を占める。

そして残りでトラップフレームがないダンプとしてプールを壊したドライバのコードの逆アセンブルリストを見て追っかけるというのが、ちょっと紹介(ここまで来ると、とっかかりを示して、後は経験だということなのだろうし、それは正しいと思う)。そしてカーネルデバッグの方法を説明。

この本を試すには、Windowsマシンとネットワークがあれば良いわけで(というのは、デバッガにしろダンプ採取ツールにしろ、MSの無料ツールだからだ)、とりあえず買って読みながら試すと良いと思う。

なぜなら、Webページにこのての情報が書いてあってもSTOPエラーで殺したりするわけだから参照性が悪すぎる。書籍だから実験材料のマシンが倒れても問題なし。

というわけで、Windowsと付き合っている/付き合える環境にある人にお勧めします。

Windowsダンプの極意 エラーが発生したら、まずダンプ解析!(上原 祥市)

個人的(昼の仕事系)には、これのWindows CE(CPUはARM)版が欲しいところ。

あと、見た目がチェンの極意本に似ているけど、アスキーハイエンド書籍ということと、プラットフォームがWindowsという以外には共通点がないのが、微妙におもしろいと思った。

Windowsプログラミングの極意 歴史から学ぶ実践的Windowsプログラミング!(Raymond Chen)

(これはこれでおもしろいのだが、ダンプの極意とは違ってエッセー風なおもしろさのほうが大きい)


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え