Visual Studio Code(VSCode)を用いてC++のStandard Template Library(STL)をデバッグする方法について。
実はすでにWeb上には情報がありますが、なぜかGoogle検索で見つけられなかったので自分で書いてみます。
元ネタはこちらの、GithubのIssue Listにあります。
https://github.com/Microsoft/vscode-cpptools/issues/69
Visual Studio CodeはオープンソースでGithub上で管理されているため、バグリストもGithubに載っているようです。
1
はじめに
本稿は、STLを用いたC++をg++でコンパイルし、gdbでデバッグするVSCode環境を想定しています。
そのためには、まずVSCodeやプラグインのC/C++ for Visual Studio Codeをインストールしなければならないのですが、それはこのあたりを参考にして下さい。
http://gabekore.org/vscode-c-windows
なお、筆者の環境は以下のとおりです。
- Ubuntu 16.04.1 LTS
- g++ 5.4.0
- gdb 7.11.1
- Visual Studio Code 1.7.2
- C/C++ for Visual Studio Code 0.9.2
※2016/12/23追記
C/C++ for Visual Studio Codeは、0.9.3からデフォルトの設定でSTLのデバッグができるようになりました。下に記した「launch.jsonに記述する方法」の追加記述は、0.9.3でlaunch.jsonを新規作成する場合は不要となります。しかし、0.9.2以前のバージョンで既にlaunch.jsonを作成してしまっている場合は追加記述が必要です。
問題
さて、VSCodeを使ってC++をデバッグできる環境が整ったとします。
STLを使ったコードを書いていざ動かそうとすると、変数の中身が読めないことに気づきます。
(添付の画像だと、aというvector配列の中身が表示されていません。)
解決策
前述のissue listによれば、gdbのpretty printingを有効にすれば中身が見えるらしいのですが、動作が遅くなるためかデフォルトではオフになっているようです。VSCodeが自動的に判別してくれるといいのですが現状ではそうなっていません。
そこで解決策としては次の2通りがあります。
debug consoleを用いる方法
その場ですぐに見たい場合には、debug consoleに"-exec -enable-pretty-printing"と入力してreturn押下します。
すると、変数の中身が読めるようになっているはずです。
launch.jsonに記述する方法
上の方法だと、VSCodeを起動するたびにpretty-printingの有効化が必要になります。
最初から有効にしておきたければ、launch.jsonに記述しておきます。
(launch.jsonを作成するには、F5 を押して、環境の選択 > C++(GDB/LLDB)。)
-
マイクロソフトのテクニカルエバンジェリストである戸倉彩さんにtwitterで質問した際、このissue番号を教えていただきました。 ↩