キイロイトリらぼ

ぬいぐるみと一緒に生きていきます

C言語をVScodeでデバッグする(gdb)

概要

 VScodeを使ってC言語デバッグしたい.

ブレークポイントやら変数の中身が見たいのだ.

検索すると,おおよそGDBデバッガーの設定が出てくるが,どうもパッと見ただけでは,自分の環境では再現できなかった.

こちらのサイト

mattyan1053.hatenablog.com

を見たりして,腰を据えて取り組んでみて,ようやくGDBデバッグまでできたので,設定をメモする.

結論

 タスクの構成であるtasks.jsonデバッグの設定のlaunch.jsonの設定を作業フォルダ用に編集すればOK

 

実行したこと

実行環境

【ホストPC】

  • windows10 64bit Home

前提

GCCGDBのインストールはWindowsならMinGWでできる.インストール方法は各種サイト参照.
VScodeのターミナルでgccでビルドできれば問題ないはず.

手順

  1. 作業フォルダを用意して,デバッグしたいプログラムを置く

    f:id:gijin94yobu:20200718003347p:plain

    作業フォルダにデバッグしたいプログラム(list4_2.c)を置いた
  2. [Ctrl+Shift+P]を押して,”タスクの構成”を選択する

    f:id:gijin94yobu:20200718003528p:plain

    タスクの構成を押す
  3. tasks.jsonが生成される.初期設定ではGDBでビルドできなかったので,先のサイトを参考に内容を下記のように書き換える."label"が新たに作成したコンパイル名(g++ compile)になる."args"でコンパイルの設定コマンド.gcc -o test test.cみたいなコマンドが渡せる.今回はシンプルにするために,実行ファイル名は命名せずに,a.exeになるようにした.

    f:id:gijin94yobu:20200718003753p:plain

    tasks.jsonファイル(左が初期,右が変更後)
  4. 元のファイルに戻って,[Ctrl+shift+B]を押すと,実行するビルドタスクが表示される.

    f:id:gijin94yobu:20200718004328p:plain

    用意したビルドタスクが表示される
  5. 選択するとビルドができるはず.ビルド後は,a.exeが生成されるはず.

    f:id:gijin94yobu:20200718004517p:plain

    ビルド成功した例
  6. F5を押して,デバッグをする.すると,下記のように何でデバッグをするかが表示される.

    f:id:gijin94yobu:20200718004627p:plain

    F5でデバッグ候補が表示
  7. C++(GDB/LLDB)を選択する.すると,launch.jsonが生成される.このままでは,デバッグはできないので,作業フォルダに合わせて修正が必要.先のサイトを参考に下記のように変更する.重要なのは,"program"と"miDebuggerPath"."program"は作業フォルダにある実行ファイル名に合わせて修正する.今回であれば,${workspaceFolder}/a.exeになる."miDebuggerPath"は下の例ではもともと生成されていたが,このサイトではないようだ.MinGWがインストールされているパスに合わせる必要がある.

    f:id:gijin94yobu:20200718004809p:plain

    launch.json(左:初期設定,右:修正後)
  8. 修正が終わったら,F5を押す.すると,下記のようにGDBが起動されるはず.

    f:id:gijin94yobu:20200718005447p:plain

    GDB起動の様子
  9. これでブレークポイントをはったり,ステップ実行をしたりできる.変数の中身も見れる.

    f:id:gijin94yobu:20200718005714p:plain

    ブレークポイントを置いて実行した例

プログラム

確認に使用したプログラムはこちら.

 

github.com

 

 

あとがき

 VScodeをつかってC言語を書くことは増えてきたが,あまり長いプログラムを書かなかったのでデバッグの必要性を感じていなかった.しかし,ある程度長いプログラムや,難しいプログラムを写経すると,デバッグして理解したくなる.はじめこそVScodeデバッグボタンを押すだけで,なぜかできないことで諦めていた.いろいろ調べたところによると,この方法が最適解ではなく,もっとjsonファイルの設定で以下用にもできるのだとは思う.思い切ってVisual studioでやってもいいのだが,やはり,使い勝手から敬遠してしまう.

参考

mattyan1053.hatenablog.com