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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

41005閲覧

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

Koko_Hekmatyar

総合スコア15

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/12/12 09:47

編集2018/12/14 02:47

前提・実現したいこと

エラーなおしてデバッグができるようにしたい。
ググって見様見真似で設定したので、これを機に回答者さんに教えていただきながら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の部分に緑の波線が出てきたので以下のように変更しました。

json

1 2//tasks.json (for gcc)の記述内容 3"version": "2.0.0", 4"tasks": [ 5{ 6 "label": "echo", 7 "type": "shell", 8 "command": "echo Hello", 9 "group": { 10 "kind": "build", 11 "isDefault": true 12 } 13 } 14 ], 15 "command": "gcc", 16 "presentation": { 17 "reveal": "always" 18 }, 19 "args": ["-g", "-O0", "-o", "step.exe", "step.c"], 20 "problemMatcher": "$tsc" 21}

次に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",を追加しました。

json

1//launch.jsonの記述内容 2{ 3"version": "0.2.0", 4 "configurations": [ 5 { 6 "name": "(gdb) Launch", 7 "type": "cppdbg", 8 "request": "launch", 9 "program": "${workspaceRoot}/debug/step2.exe", 10 "args": [], 11 "stopAtEntry": false, 12 "cwd": "${workspaceFolder}", 13 "environment": [], 14 "externalConsole": true, 15 "MIMode": "gdb", 16 "miDebuggerPath": "C:/MinGW/bin", 17 "setupCommands": [ 18 { 19 "description": "Enable pretty-printing for gdb", 20 "text": "-enable-pretty-printing", 21 "ignoreFailures": true 22 } 23 ] 24 } 25 ] 26}

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/12 13:50

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

2018/12/13 00:15

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

退会済みユーザー

2018/12/13 05:02

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

回答2

0

ベストアンサー

こんな感じで

json

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

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

json

1// launch.json 2{ 3 "version": "0.2.0", 4 "configurations": [ 5 { 6 "name": "C/C++: (gdb) Launch", 7 "type": "cppdbg", 8 "request": "launch", 9 "program": "${workspaceFolder}/step.exe", // デバッグ対象へのパス 10 "args": [], 11 "stopAtEntry": false, 12 "cwd": "${workspaceFolder}", 13 "environment": [], 14 "externalConsole": true, 15 "MIMode": "gdb", 16 "miDebuggerPath": "c:/mingw/bin/gdb.exe", // gdb.exeへのフルパス 17 "setupCommands": [ 18 { 19 "description": "Enable pretty-printing for gdb", 20 "text": "-enable-pretty-printing", 21 "ignoreFailures": true 22 } 23 ], 24 "preLaunchTask": "Debug Build" // デバッグ開始時に実行するtask.jsonのタスク名 25 } 26 ] 27} 28

投稿2018/12/12 13:49

編集2018/12/12 14:06
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Koko_Hekmatyar

2018/12/13 01: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)
Koko_Hekmatyar

2018/12/14 01:08

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

退会済みユーザー

2018/12/14 05:45

https://code.visualstudio.com/docs/editor/variables-reference ${fileBasename}とか${fileBasenameNoExtension}.exeを使えばエディタで開いてるアクティブなファイル名に置換されますね。 settings.jsonとか別のファイルを一緒に開いてるとそれがファイル名に使われてしまうので一長一短ですが…。
guest

0

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

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

投稿2018/12/12 09:56

aikon_marimo

総合スコア1083

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Koko_Hekmatyar

2018/12/12 11:14

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

2018/12/12 11: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すれば動くかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問