はじめに
WindowsでC言語のプログラミングをする場合にデバッグをする方法として
- Visual Studioを使う
- WinDBGを使う
- cdbを使う
などがあるが、CLIから離れたくない人はcdbくらいしか選択肢がない。
cdbを少し触って何とか使えるようになったので、備忘録を残す
cdbのインストール
cdbはDebugging Tools for Windowsに付属している。インストール方法はいろいろあるが、VisualStudioからWindows SDKをインストールするのか手っ取り早い。
インストールしたらcdbにPathを通すのとシンボルファイルの環境変数を設定する必要があるらしい。(よく分かってない)
_NT_SYMBOL_PATH = "srvC:\Symbolshttp://msdl.microsoft.com/download/symbols"
コンパイル時にpdbファイルを生成
CLIから離れたくない人はコンパイルはcl.exeを使うと思うが、コンパイル時にpdbファイルを作成しないとデバッグ時にシンボルやソースを利用できない。clの/Ziオプションをつけるとpdbファイルが生成される
cl /Zi main.c
cdb起動時のオプション
cdbはデフォルトではディスアセンブリモードになっており、ソースは表示されない。なので、起動すると同時にソースモードにして表示オプションを設定する。
cdb -lines -c "l+s;l+o;l+l;l+t;" main.exe
ブレークポイントの設定
シンボルを読み込めているとモジュール名!関数名でブレークポイントを設定できる
bp main!main
また、ソースを正しく読めていればソースの特定の行にブレークポイントを置くこともできる
bp `main.c:8`
cdbでデバッグ
gコマンドでプログラムが実行される。最初にブレークポイントが置かれているので2回gコマンドを実行すると自分で設定した最初のブレークポイントまで実行される。
そのあとはステップ実行や変数表示をしながらデバッグする
g:実行
p:ステップオーバー
t:ステップイン
dv:変数表示
lsa .:周辺のソースを表示
q:終了
何も入力せずにEnter:前回のコマンドを実行
とりあえずこれだけ覚えておけばデバッグできそう