21
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Visual Studio CodeAdvent Calendar 2016

Day 13

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

Last updated at Posted at 2016-12-12

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番号を教えていただきました。

21
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?