意図と異なる動作をバグと呼ぶことが多い。意図通りに動かないソフトウェアなぞ全く役に立たないので、デバッグという作業は非常に大事な開発プロセスである。でも今までやっていたデバッグの作業は、クラッシュするまでステップオーバーし、printfとMessageBoxを元にtry&errorで繰り返しビルドするという単純なものだった。これじゃあイカンと思って、キッチリとした技術を学ぼうと思った。

以下本当にダラダラとした学習の記録

-[[Windowsプログラマのためのデバッグテクニック徹底解説:http://www.amazon.co.jp/exec/obidos/ASIN/4891001860/qid%3D1139467824/sr%3D8-2/ref%3Dsr%5F8%5Fxs%5Fap%5Fi2%5Fxgl14/250-8789442-714902/250-8789442-7149027]]を買って読んで、奥の深さを思い知らされた。

-VS.NET2003で、プロジェクトのプロパティからC/C++ ==> 全般 で、「警告レベル4」及び「警告をエラーとして扱う」の設定ができる。

-[[Debug Tutorial Part 1: Beginning Debugging Using CDB and NTSD:http://www.codeproject.com/debug/cdbntsd.asp]]を読んだ。このくらいが自分に適した内容かなと思った。
-[[Debugging Tools for Windows:http://www.microsoft.com/whdc/devtools/debugging/default.mspx]]で各種ツールを入手

-WinDBGを触ってみた。Symbol File Path を
 SRV*c:\temp*http://msdl.microsoft.com/download/symbols

とすると、必要な時にOSのシンボルをリモートから取得してくれるみたい。自プログラムのシンボルファイルは、.exeと同じディレクトリに置けばいいのか?

-xなるコマンドでシンボルが見えた。ワイルドカードが使えるみたい。モジュール名の右隣に (pdb symbol) とあるのは、ちゃんとPDBから読めましたという意味なのだろう。 (deferred) とあるのは lazy mode(Deferred Symbol Loading)というやつなのだろう。]]

-"Debugging Tools for Windows"のヘルプの"Symbol Syntax and Symbol Matching"という項目に、シンボル名のシンタックスが書いてあった。大文字小文字の区別は無く、モジュール名とシンボル名は'!'で区切り、シンボル名はアルファベットか'_'か'$'か'?'で初まるのだそうだ。debugtestをモジュール名とすると
 debugtest!myfunc
 debugtest!_c_exit
みたいになる。

-WinDBGは[[Windows Debuggers: Part 1: A WinDbg Tutorial:http://www.codeproject.com/debug/windbg_part1.asp]]という記事もあった。