VSCODEでVisual C++ ToolKit 2003によるC言語のプロジェクトをデバッグしたい!今更!
本当に今更、というかVisual C++ ToolKit 2003は既に公開停止されてるし、誰向けの話なんだって感じですが。多分、Visual Studio 2005でも使えると思います。多分。
昔、秀丸とかでbatchファイルとメイクファイルを使ってC言語のプログラムをコンパイルやらリンクやらをやってた思い出をふりかえりたく、VSCODEでデバックできる環境を作ってみた。
あの頃は、Sublime TextとかJmEditとかAtomとかいろいろなテキストエディタの間をふらふらしてた思い出。
概要
VSCODEでVisual C++ ToolKit 2003によるC言語のプロジェクトをデバックする設定を掲載します。
注意
Visual C++ ToolKit 2003は、既にサポートが切れててセキュリティ的にあまり良くないでご注意です。
手順書
launch.jsonの例
.vscode/launch.json
の入力例を下記に示す。
{
"version": "0.2.0",
"configurations": [{
"name": "C++ Launch (Windows)",
"type": "cppvsdbg",
"request": "launch",
"preLaunchTask": "rebuild-debug",
"program": "${workspaceFolder}/bin/debug/program.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/bin/debug",
"environment": [],
"console": "internalConsole",
"internalConsoleOptions": "openOnSessionStart"
}]
}
環境によって書き替える必要がある項目を挙げる。
preLaunchTask
はデバッグ開始前に実行するtask.json
に記述されたタスクを指定できる。上記の場合は、rebuild-debug
というタスクを実行する例です。
program
にはデバッグするプログラム(出力したexeファイルなど)を指定する。上記の場合は、ワークスペースフォルダの中にあるbin/debug/program.exe
というプログラムをデバッグする例です。
cwd
にはデバッグ開始時の作業ディレクトリを指定する。通常は、デバッグするプログラムがあるディレクトリを指定すれば良い。上記の場合は、ワークスペースフォルダの中にあるbin/debug
というディレクトリを指定するです。
コンパイル・リンクのオプションの例
デバッグでブレイクポイントや変数をウォッチしたい場合、コンパイルやリンクをおこなう際にオプションで最適化を無効化やデバッグ情報の出力をできるようにする必要がある。
下記に設定の例を示す。
コンパイラ(cl.exe)
/Od /Z7 /D _DEBUG
/Od
は、最適化を無効にするオプションである。
/Z7
は、デバッグ情報をすべて含むようにするオプションである。
/D _DEBUG
はプリプロセッサに_DEBUG
を定義するオプションである。外部のライブラリなどが_DEBUG
でデバッグの判定をしてる可能性があるので定義しておくのが吉。
リソース・コンパイラ(rc.exe)
/d _DEBUG
/d _DEBUG
はをプリプロセッサに_DEBUG
を定義するオプションである。多分、意味がないけど念のため。
リンカ(link.exe)
/DEBUG:FULL /OPT:NOICF /MAP
/DEBUG:FULL
はデバッグ情報をすべて出力するオプションである。バイナリファイルの出力先に.pdb
ファイルが出力される。
/OPT:NOICF
はリンカの最適化を無効にするオプションである。
/MAP
はマップファイルの生成するオプションである。バイナリファイルの出力先に.map
ファイルが出力される。
テスト
標準の設定だとVSCODEでF9
でブレイクポイントの設定、F5
でデバッグを開始できるのでテストしてみよう。
ブレイクポイントなどで一時停止するとローカル変数の状態の状態を確認することができる。
まとめ(感想文)
F5
でデバッグ開始できるだけでも相当便利ですね。
デバッグ関係ないんですが、文字列の結合がオペランドでやれないのは現代では正直キツイっす。
引用・参考文献
コンパイラなどで使用できるオプションを確認したい場合はcl.exe -help
で直接本人?に聞いてみよう。
下記のサイトでは新しいバージョンのものしか載ってないんですが、こちらでも確認できる。ただし、対応していないオプションもそれなりにあるので注意。