意図と異なる動作をバグと呼ぶことが多い。意図通りに動かないソフトウェアなぞ全く役に立たないので、デバッグという作業は非常に大事な開発プロセスである。でも今までやっていたデバッグの作業は、クラッシュするまでステップオーバーし、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]]を買って読んで、奥の深さを思い知らされた。
 *link [#o75ed2ad]
 **Web [#i3c9951e]
 ***The Code Project [#se4e9f93]
 Toby Opfermanなる人が素晴らしい文章を書いている。コーディングの心構えなどには触れていないが、実際のデバッグの手続き、つまり「どういうソフトをどのように使ったら何がわかってどのように嬉しいか」について丁寧に解説している。基本的にデバッグはprintfに頼りきってる人(私)が見れば、世界がひとつ増える感じ。
 
 -[[Debug Tutorial Part 1: Beginning Debugging Using CDB and NTSD:http://www.codeproject.com/debug/cdbntsd.asp]]
 -[[Debug Tutorial Part 2: The Stack:http://www.codeproject.com/debug/cdbntsd2.asp]]
 -[[Debug Tutorial Part 3: The Heap:http://www.codeproject.com/debug/cdbntsd3.asp]]
 -[[Debug Tutorial Part 4: Writing WINDBG Extensions:http://www.codeproject.com/debug/cdbntsd4.asp]]
 -[[Debug Tutorial Part 5: Handle Leaks:http://www.codeproject.com/debug/cdbntsd5.asp]]
 
 **書籍 [#w3b9b6fe]
 
 -[[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]]を買って読んで、とりあえず奥の深さは良くわかったし、色々と知らない事が書いてはあったが、本当にイチから「デバッグって何?」みたいな事を知りたい人には多少敷居が高い。
 
 *雑多メモ [#ofb25576]
 
 -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]]で各種ツールを入手
 -[[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]]という記事もあった。