Help us understand the problem. What is going on with this article?

Visual Studio Codeを用いたC++ STLデバッグの方法(※2016/12/23追記)

More than 3 years have passed since last update.

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配列の中身が表示されていません。)
vsc.PNG

解決策

前述のissue listによれば、gdbのpretty printingを有効にすれば中身が見えるらしいのですが、動作が遅くなるためかデフォルトではオフになっているようです。VSCodeが自動的に判別してくれるといいのですが現状ではそうなっていません。
そこで解決策としては次の2通りがあります。

debug consoleを用いる方法

その場ですぐに見たい場合には、debug consoleに"-exec -enable-pretty-printing"と入力してreturn押下します。
VSC2.png
すると、変数の中身が読めるようになっているはずです。

launch.jsonに記述する方法

上の方法だと、VSCodeを起動するたびにpretty-printingの有効化が必要になります。
最初から有効にしておきたければ、launch.jsonに記述しておきます。
VSC3.PNG
(launch.jsonを作成するには、F5 を押して、環境の選択 > C++(GDB/LLDB)。)


  1. マイクロソフトのテクニカルエバンジェリストである戸倉彩さんにtwitterで質問した際、このissue番号を教えていただきました。  

cypher512
組み込みソフトエンジニアやる傍ら、北海道大学大学院に在籍してアルゴリズムを研究しています。ときどき災害ボランティアに行きます。
http://d.hatena.ne.jp/cypher512/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away