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

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

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

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

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Q&A

1回答

3362閲覧

VScodeでC言語の複数ファイルデバッグを実現したい

marchan

総合スコア4

C

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

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

0グッド

0クリップ

投稿2021/11/23 00:42

編集2021/11/24 14:26

前提・実現したいこと

単体のファイルはデバッグを実行できるのですが、
複数ファイルでできた.hを使ったプログラムでmainが入ったファイルをデバッグしたいときに以下のようなエラーがでてうまくいきません。
正直デバッグの理屈をよく知っているわけではないのですが"type": "cppdbg",がc++専用でcでは使えないのでは?
と思い、"type": "gdb",に変更したところ別のエラーが出ました。

複数ファイルで.hを使ったプログラムでmainが入ったファイルをデバッグするやり方を教えてください。よろしくお願いします。

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

初めに出た("type": "gdb",に変更する前の状態のときの)エラー

"type": "gdb",に変更したときのエラー

該当のソースコード

配列を行列っぽく表示するコード

#include <stdio.h> void put_hyo(int gyo,int retu,int* hyo){ int i=0; int j=0; printf("{\n"); for ( i = 0; i < gyo-1; i++) { printf(" { %2d",hyo[i*retu+0]); for ( j = 1; j < retu; j++) { printf(", %2d",hyo[i*retu+j]); } printf(" },\n"); } printf(" { %2d",hyo[(gyo-1)*retu+0]); for ( j = 1; j < retu; j++) { printf(", %2d",hyo[(gyo-1)*retu+j]); } printf(" }\n}\n"); }

ヘッダファイル

void put_hyo(int gyo,int retu,int* hyo);

mainが入ったコード

#include "hoge.h" int main(){ int h[5][2]={ {0,1}, {0,1}, {2,1}, {3,1}, {4,5}, }; put_hyo(5,2,(int*)h); return 0; }

launch.json

{ // IntelliSense を使用して利用可能な属性を学べます。 // 既存の属性の説明をホバーして表示します。 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "gcc.exe - アクティブ ファイルのビルドとデバッグ", "type": "cppdbg", //"type": "gdb", "request": "launch", "program": "${fileDirname}\${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "C:\Strawberry\c\bin\gdb.exe", "setupCommands": [ { "description": "gdb の再フォーマットを有効にする", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "C/C++: gcc.exe アクティブなファイルのビルド" } ] }

tasks.json

{ "tasks": [ { "type": "cppbuild", "label": "C/C++: gcc.exe アクティブなファイルのビルド", "command": "C:\Strawberry\c\bin\gcc.exe", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}\${fileBasenameNoExtension}.exe" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "デバッガーによって生成されたタスク。" } ], "version": "2.0.0" }

### 試したこと
Windows Power Shellによる(VScodeの機能を介さない)コンパイル

> gcc hoge_main.c hoge03.c -c > gcc hoge_main.o hoge03.o -o hogehoge > .\hogehoge { { 0, 1 }, { 0, 1 }, { 2, 1 }, { 3, 1 }, { 4, 5 } }

VScodeでRunしたときに出てくるエラーメッセージ

(.text+0x65): undefined reference to `put_hyo' collect2.exe: error: ld returned 1 exit status [Done] exited with code=1 in 1.435 seconds

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

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

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

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

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

Zuishin

2021/11/23 07:12

js がどうこう出てるけど、C 言語用の設定にしましたか?
Bull

2021/11/23 13:13

VScode ではどのようにコンパイルしていますか? Makefile は使用していますか? エラーメッセージは "hoge_main.exe" がないと言っていますが。
marchan

2021/11/24 13:33 編集

一つのファイルで書ききったC言語のコードは同じやり方でデバックできているので多分、C言語用の設定にはなっていると思いますが確認方法とかはよくわかっていません。 makefileについては調べてもよくわからなかったので使いませんでした。 VScode ではうまくコンパイルできなかったので今まではコンパイルと実行はファイルを右クリックすると出てくる結合ターミナルを開くで開かれたpowershellでコンパイルしていました。 ここら辺が原因な気がしていきました。 あとで、VScode内でコンパイルするとどうなるか、とpowershellでコンパイルするとどうなるかを質問を編集して乗せようと思います。
marchan

2021/11/24 13:39 編集

エラーメッセージにはhoge_main.exeがありません、とあるのですがwindowspowershellでコンパイルしたものが存在するし、むしろVSCodeでデバッグしようとするとhoge_main.exeファイルは消滅した上で "hoge_main.exe" がないというエラーメッセージが出てきます。 あらかじめ用意しておいたhoge_main.exeファイルが消滅していることからどこかのスペルミスである可能性は低いと思っています。 おそらく競合しないように、あるいは余計なファイルが大量に作られるのを防ぐためにどっかのタイミング、例えばデバッグが終了したタイミングとか、でhoge_main.exeファイルを消す使用になっているのかな?と思っています。 launch.jsonやtasks.jsonの内容を何か変更すればいいのかな?とは思っているのですが具体的にどうすればいいのかわかりませんでした。
marchan

2021/11/24 13:57

違います。 そしてその質問者さんはデバッグの実行自体はできているようなので自分とは状況が違うと思いました。
Bull

2021/11/24 14:03

エラーメッセージを見るとリンクに失敗しています。 launch.json はどうなっていますか?
marchan

2021/11/24 14:27

ありがとうございます。 今、launch.jsonやtasks.jsonの内容を質問の編集で上げました。 ここを変更した方がいいような気はしているのですが具体的に何をどう変更すればよいのかはよくわかりませんでした。
Bull

2021/11/24 14:39

"preLaunchTask" が指定されているので、デバッグする前にビルドしていて、ビルドに失敗しているので "hoge_main.exe" が消されるのでしょう。 とりあえず "preLaunchTask" を消せば、デバッグの前にビルドすることはなくなります。 あと、デバッグするためには -g オプションが必要です。
marchan

2021/11/24 15:35

ありがとうございます。デバッグは実行できました。 "preLaunchTask" をコメントアウトしたところデバッグの動作でエラーは出ませんでした。 しかし、ブレークポイントを設置しても止まりませんでした。 「デバッグするためには -g オプションが必要です。」の意味を、launch.json内の"args": [],を"args": [”-g”],に変更することだと思っていたのですがそこの変更は関係なくて、コンパイル時に gcc hoge_main.c hoge03.c -c としていた部分を gcc hoge_main.c hoge03.c -c -g と変更したらうまくいきました。 ありがとうございました。
guest

回答1

0

単にコンパイルエラーが起こってる為に、実行デバッグまで進まないだけですね
まずはそのコンパイルエラーをすべて修正しましょう。

投稿2021/11/23 01:43

編集2021/11/23 01:43
y_waiwai

総合スコア88042

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

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

marchan

2021/11/23 07:05

ご回答ありがとうございます。 windowspowershellでコンパイル実行してみたところ、正常に実行できたためプログラミングがおかしいわけではないと思われます。 後で質問を編集してコンパイルした様子も載せておきます。
y_waiwai

2021/11/23 07:09

なら、VSCodeでビルドするときの設定が間違ってるってことですね エラー・メッセージをよく読もう
marchan

2021/11/23 07:25

確かにその可能性が高いと思われます。しかし、どこをどう変更すればよいのか全く分からないのです。 エラーメッセージにはhoge_main.exeがありません、とあるのですがwindowspowershellでコンパイルしたものが存在するし、むしろVSCodeでビルド?をするとhoge_main.exeファイルは消滅します。 おそらく競合しないように、あるいは余計なファイルが大量に作られるのを防ぐためにどっかのタイミング、例えばデバッグが終了したタイミングとか、でhoge_main.exeファイルを消す使用になっているのかな?と思っています。 launch.jsonやtasks.jsonの内容を何か変更すればいいのかな?とは思っているのですが具体的にどうすればいいのかわかりませんでした。 なにか、アドバイスや、次に調べるべきことがあれば教えてください。 よろしくお願いします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問