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

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

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

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

デバッグ

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

Q&A

解決済

1回答

6748閲覧

VSCodeのデバッグモードでポインタへのポインタが指す先の値をウォッチする方法

KIYZ

総合スコア17

C

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

デバッグ

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

0グッド

0クリップ

投稿2020/08/06 08:20

編集2020/08/06 09:18

以下の様なプログラムをデバッグするとします

  • 動的確保されたメモリに保存された3つの文字列が存在します
  • それらの文字列の先頭の値を指すアドレスが動的確保されたポインタへのポインタに保存されています

c

1#include <string.h> 2#include <stdlib.h> 3 4int main(void) 5{ 6 char *p0 = strdup("red.."); 7 char *p1 = strdup("green"); 8 char *p2 = strdup("blue."); 9 char *p3 = NULL; 10 char **pp = malloc(sizeof(char *) * 4); /* この変数をデバッグ中にウォッチしたい */ 11 12 pp[0] = p0; 13 pp[1] = p1; 14 pp[2] = p2; 15 pp[3] = p3; 16 17 /* 何かをする */ 18 19 return (0); 20}

実現したいこと

VSCodeのデバッガーのウォッチビューで、以下の様な表示形式で各ポインタへのポインタが指す文字列のcharの値(や先頭値のアドレス)をウォッチする方法を教えて下さい。

text

1<pp用のウォッチ式>: <ppのアドレス> 2 |- pp[0]: [6] <pp[0]のアドレス> 3 | |--- [0]: 'r' 4 | |--- [1]: 'e' 5 | |--- [2]: 'd' 6 | |--- [3]: '.' 7 | |--- [4]: '.' 8 | |--- [5]: '\0' 9 | 10 |- pp[1]: [6] <pp[1]のアドレス> 11 | |--- [0]: 'g' 12 | |--- [1]: 'r' 13 | |--- [2]: 'e' 14 | |--- [3]: 'e' 15 | |--- [4]: 'n' 16 | |--- [5]: '\0' 17 | 18 |- pp[2]: [6] <pp[2]のアドレス> 19 | |--- [0]: 'b' 20 | |--- [1]: 'l' 21 | |--- [2]: 'u' 22 | |--- [3]: 'e' 23 | |--- [4]: '.' 24 | |--- [5]: '\0' 25 | 26 |- pp[3]: [6] <0x0000000000000000> 27 |--- [0]: 'r' 28 |--- [1]: 'a' 29 |--- [2]: 'n' 30 |--- [3]: 'd' 31 |--- [4]: 'o' 32 |--- [5]: 'm'

既に知っていること

ウォッチビューに(char(*)[6])pp[0] というウォッチ式を追加すれば、pp[0] が指す先の文字列のpp[0][0] から pp[0][5] までのcharの値をウォッチすることができることは知っていますが、多数のポインタを扱っている場合に、(char(*)[n])pp[i]をいくつも追加するのは非効率なので、一つのウォッチ式を追加するだけで上記の様な形式でppをウォッチする方法や、全く別の方法(拡張機能等)を教えて下さい。

一つの文字列をウォッチ

よろしくお願いします。

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

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

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

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

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

yumetodo

2020/08/06 12:26

C++使っちゃだめですかね?ポインタは要素数の情報を持たないのでお示しのような方法以外にないと思います。C++のstd::vectorないしそういうのなら解決できそうです。
guest

回答1

0

自己解決

以下のようにタイプキャストしたppをウォッチ式として追加すると実現できました。

C

1(char (*(*)[4])[6])pp

cast_pp

投稿2020/08/07 03:43

KIYZ

総合スコア17

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問