トップ «前の日記(2009-05-02) 最新 次の日記(2009-05-04)» 編集

日々の破片

著作一覧

2009-05-03

_ Windowsのデバッグ

アスキーの嘉平さんからもらったので、ちゃんと読んでから紹介しようと思ったのだが、プロダクティブ・プログラマや、リファクタリング・ウェットウェアと違って、頭から読む本じゃないや。というわけで、とりあえずぱらぱらと見終わったので、さっさと紹介してしまおう。

Windowsデバッグの極意 ツールを使いこなして、バグハント!(Mario Hewardt)

名前の通り、Windowsのデバッグに特化した本で、分厚い。約800ページある。訳はロングテール長尾さんなので、普通に読める普通の日本語。装丁は他の極意本(ダンプとか)とそっくりなので紛らわしいが、まあそういうものかと。書いているのは、MSのシニアデザインエンジニアの人たち。デザインエンジニアって、設計技師と訳したほうが正しいイメージなのかも。

で、一言で紹介すれば、この本は、各種障害発見時のkd(コマンドラインのカーネルモードデバッガ)を使った追っかけ方の解説だ(ユーザモードデバッガについても説明されていることは当然として)。

ほとんどのアプリケーションデベロッパはカーネルデバッガを使おうとはしないのだが、それは複雑すぎるということではなく、不要に感じられるからである。だが、「デバッグのシナリオ」や他の章で詳細を示すが、カーネルデバッガを使うのが一番自然な場合もある。これらの状況では、カーネルデバッガを使う以外の方法は回り道になりかえって高くついてしまう。

では、どういう場合か。目次から。

2.5.1 非対話的プロセス(サービスやCOMサーバー)のデバッグ

というわけで、実際、もうこの分野しか残っていない。だって、マネージドで作っている限り、この世界に落ちる必要はほとんどないからだ。

しかし、まさにこれが、今デバッグしたいもののほとんどかも知れない。

という点から、本書を買うべきなのは、アンマネージドの世界で生きる組み込みの人、ネットワーク用に高速サーバとか作っている人、マネージドの人のためにCOM(の必要は必ずしもないけど)外部プロセスサーバを作っている人。あと、Windowsの内側についての情報を集めている人。Visutal Studioのデバッガに何の不満もない人には別に不要でしょう(だが、アンマネージドでC/C++プログラミングをしているなら、手元に置いておいたほうが良いかも知れない)。あと、Visual Studioの恩恵に預かれないCygwinやMingwの人にも役立つと思うよ。ここで説明されているデバッガ群は無料の意味でフリーだから(次の行にリンクを張っておいた)。

本書の構成は、最初がツールの説明と、コンソールベースデバッガの基本的な使い方の説明。デバッグツールとシンボル

次に、デバッガの秘密と称して、デバッガとはどんなもので何をできるかについての読み物。それにしても、デバッガのためにいろいろな割り込み(フックと呼ぶべきか)をWindowsが用意しているのには感心する。このあたりは、WindowsというOSについて知るのにもよさそうな情報源。

ここまでで全体の1/4。

そして、以下、シナリオと解決(デバッガの操作と見方、関連する構造体の説明や、Windowsの仕組み解説、そして重要なのはどうやって防止するかの情報)が順に続く。

・メモリ破壊パート1 スタック

・メモリ破壊パート2 ヒープ

・セキュリティ (DCOMを使っていたころに、これがあったらなぁ)

インパーソネートのボーダーのあたり

・プロセス間通信

この章は、すごく重要で、LPC(LRPCのベースとなるWindowsのアンドキュメンテッドなプロセス間通信のインフラ)の状態の見方や追い方などが出ている。何が重要かというと、アンドキュメンテッドな情報のうちデバッガが見せられるところについては、意味が書いてあるからだ。

・リソースリーク

ここはおもしろい。デバッグプロセスの概要として、追っかけ方が手順化されている。

・同期

まあ、これは当然必要。スレッドの同期バグの見つけ方。この章もデバッグプロセスの概要として、追っかけ方が手順化されている。

ここまでで3/4。残りは高度なトピックとしてデバッガの拡張方法や、64ビットWindows、ポストモータムのいじり方、Vista(UACとか)。

良い値段だが、MSDN Subscriptionを購入できる個人や組織にとっては得られる情報に比較すると大した価格ではないと思う。

それにしても良い時代だな。シンボル情報をインターネットを通じて取り寄せて、表示できるとか。

追記:思い出した。タイポ:P.405 1個所「RPC」を「RCP」と打っているところがある。


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|

ジェズイットを見習え