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

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

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

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

6839閲覧

vscodeでデバック中、メモリの内容を読みたい

glp

総合スコア102

C

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2018/09/06 11:29

困っていること

vscodeでC/C++をデバック中、ポインタが示している先のメモリの内容を
表示したい。

struct sockaddr_in addr; char *s = (char *)&addr;

例えば、上の例でsが示す先頭から適当に(10バイト位)ダンプしたい。

試したこと

ウォッチ式に s[0], s[1],...と順に記入すれば見れるのですが、さすがにしんどい。
「メモリダンプ」でgoogleしたのですが、ダンプファイルをdebuggerで追う方法は出てくるのですが、特定のメモリ空間をダンプ表示する方法が見つけられませんでした。

宜しくお願いします。

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

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

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

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

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

hmmm

2018/09/08 07:25

VSCodeは使ったことありませんが、 s,10をウォッチ式に入れてみたらどうでしょうか?普通のVisual Studioなら配列表示できます。
glp

2018/09/08 08:45

試してみましたが、10と表示されました
glp

2018/09/18 03:16

yohhoyさんありがとうございました。 教えていただいたリンク先を参考にしてウォッチ式に "*(char(*)[10])s,h" のような式を入力すると希望するようにpointerの先をダンプすることができました。ほんとは16進ダンプのような形で見たかったのですが、これでも十分実用になります。おかげでデバック用のスタブを入れなくても済みます。ありがとうございました。
guest

回答2

0

自己解決

yohhoyさんに教えていただいたリンク先を参考にウォッチ式に

*(char(*)[10])some_pointer,h

のようにポインタを配列にキャストしてやれば無事に参照先をダンプできることがわかりました。
色々な回答をいただいた方、ありがとうございました。

これでCloseさせていただきます。

投稿2018/09/18 03:19

glp

総合スコア102

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

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

0

私もそんな方法があれば知りたいです。

私の知る限りデバッガのウォッチ式は、動的配列等については各要素の自動表示機能がありません。ですので、要素数が多いときは無意味でも固定配列にのせかえています。

書いていて気が付きましたが、巨大な固定長char型配列を独自型として定義しておけば、ウォッチウインドウ内でキャストして表示できませんかね?未確認です。

投稿2018/09/06 12:44

HogeAnimalLover

総合スコア4830

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

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

glp

2018/09/07 00:27

>巨大な固定長char型配列を独自型として定義しておけば、 可能性としてはありますね。ただデバックのためのコードを入れるのもなんか悔しくて。 ;) ポインタのアドレスが表示されるので、その先を16進ダンプできるだけでも かなり助かるのですが。
HogeAnimalLover

2018/09/07 11:24

?デバッグ時のみのためのコードって別に珍しくないですよ。アサーションが例です。 vcならば、DEBUGマクロによる分岐でデバッグビルド時のみ有効なコードを挿入できます。大きくなるならば当該箇所を分離してinclude文をマクロで分岐すれば簡単です。
cateye

2018/09/08 06:58

今ほどデバッガの性能が良くないwころは、アドレスとサイズを指定して16進ダンプする関数を自前で作って持ってましたねd^^ で、必要な所で呼び出して、一緒にリンクすれば即ダンプww
glp

2018/09/09 02:59

さすがにデバック用に簡単な関数を書いたり、DEBUGマクロ使ったりするくらいはしています。 :) ただ、デバッカーがダンプ機能を持っていれば書かなくていいものを作るのは悔しいかと。 いまVScodeのデバックコンソールで何とかできないかと調査中です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問