質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.52%

VSCodeでデバックしたいがエラーが出て解決できない。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 6,338

Koko_Hekmatyar

score 11

前提・実現したいこと

エラーなおしてデバッグができるようにしたい。
ググって見様見真似で設定したので、これを機に回答者さんに教えていただきながら1つ1つ一緒に手順を踏んで設定していきたい。
できるだけわかりやすく書いてるつもりですが分かりにくかったらすみません。
コードの部分のインデントの仕方がわからなくて非常に醜くなっててすみません。

発生している問題・エラーメッセージ

デバッグボタン(再生ボタンみたいなやつ)を押すと以下のエラーが出ます

launch: program 'C:\mvs\step.exe' does not exit


(バージョンが違うからか参考にしたサイト通りにならなかったのだと思いますが、一応書きます。
8項目で書かれている波線と電球マークは出ませんでした。
C++(GDB/LLDB)を選択してlaunch.jsonを開いても緑の波線がありませんでした。)

試したこと

URL:https://gabekore.org/vscode-c-windows 
このページを参考にインストールおよび設定をしました。
7項目の実行(ctl+shift+R)して文字の表示まではできました。

C/C++用の設定に書かれてた通りに記述すると、バージョンが違うせいでここで書かれていない文章が最初から書いてあったのとisShellCommandとshowOutputの部分に緑の波線が出てきたので以下のように変更しました。

//tasks.json (for gcc)の記述内容
"version": "2.0.0",
"tasks": [
{
            "label": "echo",
            "type": "shell",
            "command": "echo Hello",
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ],
    "command": "gcc",                      
    "presentation": {       
        "reveal": "always"
    },                
    "args": ["-g", "-O0", "-o", "step.exe", "step.c"],
    "problemMatcher": "$tsc"
}


次にlaunch.jsonファイルの
"program": "enter program name, for example ${workspaceFolder}/a.exe",というのを消してprogram": "${workspaceRoot}/step.exe",を追加しました。

"miDebuggerPath": "/path/to/gdb",を消して"miDebuggerPath": "c:\\mingw\\bin\\gdb.exe",を追加しました。

//launch.jsonの記述内容
{
"version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceRoot}/debug/step2.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "C:/MinGW/bin",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

補足情報(FW/ツールのバージョンなど)

拡張機能
C/C++ 0.20.1
Japanese Language Pack for Visual Stdio Code  1.29.2
Runner0.15

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • lunatea

    2018/12/12 22:50

    見にくいからjsonのインデント揃えてね

    キャンセル

  • Koko_Hekmatyar

    2018/12/13 09:15

    すみません、tabつかってそろえてあったのをコピペしたのですが、プレビューみたらインデントそろっていなくてスペースで開けるなど試しましたが反映されませんでした。
    どうしたら揃えられますか?

    キャンセル

  • lunatea

    2018/12/13 14:02

    ```
    ここにコードを書く
    ```
    ↑の形式で書いていたら反映されるはずなんですが…、なんでだろう?

    キャンセル

回答 2

checkベストアンサー

+1

こんな感じで

// task.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Debug Build", // "echo"から任意のわかりやすい名前へ、launch.jsonの"preLaunchTask"等で使われる
            "type": "process",      // "shell"から"process"に変更
            "command": "gcc",       // "echo Hello"から"gcc"に変更
            "args": [
                "-g",
                "-Og",
                "step.c",
                "-ostep.exe"
            ],
            "group": {              // ビルドタスクの実行(Ctrl+Shift+B)でこのタスクが実行されるようになる
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": "$gcc" // "$tsc"から"$gcc"に変更、gccのビルドエラーがターミナルの問題にリストアップされるようになる
        }
    ]
}

miDebuggerPathはフルパスでgdb.exeまで書きましょう
task.jsonの"label"とlaunch.jsonの"preLaunchTask"の値を揃えておくと、
デバッグ開始時に指定したラベルのコマンドが実行されます。

// launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++: (gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/step.exe", // デバッグ対象へのパス
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "c:/mingw/bin/gdb.exe", // gdb.exeへのフルパス
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "Debug Build" // デバッグ開始時に実行するtask.jsonのタスク名
        }
    ]
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/13 10:40

    回答ありがとございます
    記述していただいたとおりに記述して実行したところ、exeファイルは生成されました。
    それで参考にしたページと同じところにブレークポイントをつけてデバッグしたのですが、変数のところには何も表示されず、printf文のところで止まっています。
    デバッグコンソールに表示されている内容をいかに記述します。正しく動いているのでしょうか?

    =thread-group-added,id="i1"
    GNU gdb (GDB) 7.6.1
    Copyright (C) 2013 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law. Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "mingw32".
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    Warning: Debuggee TargetArchitecture not detected, assuming x86_64.
    =cmd-param-changed,param="pagination",value="off"
    [New Thread 22256.0x1e4c]
    [New Thread 22256.0x4c48]
    Loaded 'C:\WINDOWS\SysWOW64\kernel32.dll'. Symbols loaded.
    Loaded 'C:\WINDOWS\SysWOW64\KernelBase.dll'. Symbols loaded.
    Loaded 'C:\WINDOWS\SysWOW64\msvcrt.dll'. Symbols loaded.
    Execute debugger commands using "-exec <command>", for example "-exec info registers" will list registers in use (when GDB is the debugger)

    キャンセル

  • 2018/12/13 14:16

    gdbのバージョンが古いのが気になるんですけど、gccのバージョンおよび入手先はどこでしょう?
    http://www.mingw.org/版だとしたら長いことメンテされてないらしいのでmsys2とかmingw-w64といった後続のに乗り換えたほうが良いです。

    あと、古いgccだとオプションに-Ogは使えなかったと思うので-O0にしてみて下さい。

    キャンセル

  • 2018/12/14 10:08

    www.mingw.org版でした
    -O0に変えるとステップアウト以外は動きました。変数に何の値が入っているかも見えました。
    何か別のコードを書いたときは毎回 launch.json のprogramのパスを書き換えなければならないのでしょうか?
    それとmingw-w64に乗り換えようとするとどうすればよいでしょうか?
    ダウンロードしてきてmiDebuggerPathにmingw-w64のgdb.exeまでのフルパスをかけばよいのでしょうか?

    キャンセル

  • 2018/12/14 14:45

    https://code.visualstudio.com/docs/editor/variables-reference

    ${fileBasename}とか${fileBasenameNoExtension}.exeを使えばエディタで開いてるアクティブなファイル名に置換されますね。

    settings.jsonとか別のファイルを一緒に開いてるとそれがファイル名に使われてしまうので一長一短ですが…。

    キャンセル

+1

エラーから推察すると、
C:\mvs\
の配下に実行ファイル(step.exe)が生成されていないように見えます。

確認観点としては、
①C:\mvs\step.exeが存在するか
②launch.jsonの"program"欄の「${workspaceRoot}/debug/step2.exe」はあっている?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/12 20:14

    ①>>参考にしたページのよるとctrl+shift+BでEXEファイルが生成されるとありますが、実行すると以下の文がターミナルに表示されるだけで実行ファイルは生成されていませんでした。
    > Executing task: echo Hello <
    Hello
    なのでVS2017用x64_x86 Cross Toolsコマンドプロンプトからclコマンドを使ってコンパイルしてexeファイルを生成してからデバッグを試しましたがエラーが出ました。
    ②>>いろいろ試していてこちらに質問するときに直すのを忘れていました。
    「${workspaceRoot}/debug/step.exe」に直してデバッグを実行してもエラーが出ました。

    キャンセル

  • 2018/12/12 20:57

    まず①について、
    tasks.jsonの記法が誤っているため、コンパイルが動いていません。
    echo Helloしているタスクを消して、代わりにtasksの中に"command": "gcc"以降を入れればよいと思います。
    以下の、「カスタムタスク」欄のサンプルが参考になると思います。
     https://vscode-doc-jp.github.io/docs/userguide/tasks.html

    次に②について、
    "program"に指定したディレクトリを、exeファイルがあるディレクトリに合わせれば動くと思います。
    launch.json詳しくないですが、たぶんこんな感じ?
    "program": "${fileDirname}/${fileBasenameNoExtension}.exe"
    これでソースファイルを開いた状態でlaunchすれば動くかと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる