none
デバッグ時、ポインタの中身の値をウォッチ式で配列表示したい

    質問

  • visual studio 2017 C++です

    デバッグ時、ウォッチ式にポインタの中身を配列表示したい場合

    ch1_data,128

    このように式を書けば128個分のデータがリストで見れると思っていたのですが、一つだけしか出ません。(先頭のアドレスの値?)

    記載方法が違うかかわったのでしょうか。

    2018年1月30日 2:10

回答

  • /clr オプションを有効にしているプロジェクトだからということでは?
    2015 だとデバッグで配列としてウォッチできますが、2017 だとできませんね。
    2018年1月30日 13:51
    モデレータ
  • 既に試されている通り、CLR オプションが既に利用されているプロジェクトは安易にオフにできません。

    なお、このオプションを有効にしている場合、C++ とは大きく異なる、C++/CLI と呼ばれる言語、開発環境になるので、今後、質問される際はそのことを明示していただいた方がよいでしょう。

    • 回答としてマーク CSuser01234 2018年1月31日 6:10
    2018年1月31日 3:30
    モデレータ

すべての返信

  • 私の環境(Windows 10 x64, Visual Studio 2017) の C++ コンソールプロジェクトでは、下記のように正しく配列の中身まで表示されましたので、記述方法が変わったとか違うということではなさそうです。ch1_data の型は char * ですか?それとも別の型でしょうか?

    2018年1月30日 2:35
  • 宣言は下記の通りです。

     short *ch1_data = (short *)calloc(128, sizeof(short));

    2018年1月30日 2:55
  • うーん。なんでしょうか・・・。私のところでは、上記のように short * 型で calloc しても、ウォッチには正しく配列の中身も表示されました。ちなみに Visual Studio 2017 の詳細バージョンは 15.5.6 です。

    この現象が環境によるものでなければ、プロジェクトの設定かソースコードの何かが関係しているのかもしれません。ちなみに新規作成したシンプルなプログラムでも同様にウォッチに配列の中身が表示されないのでしょうか?表示される場合は表示されないプロジェクトとの違いを調べていく作業になると思います。こちらでも再現できる最小限のプログラムが得られれば調査可能なのですが・・・

    2018年1月30日 4:45
  • 私もおかしいと思い、新規プロジェクト作成で

    windowsデスクトップアプリケーションを作ろうとすると、

    「HRESULTからの例外0x80041FE2」と言う良くわからないエラーが出てきたので諦めました…

    やりたい事はvisual studio2017のC++でポインタの中身を確認したいと言う事なのですが、

    別のデバッグモニタ表示機能などないでしょうか?

    2018年1月30日 5:04
  • 元々のプロジェクトはvisual studio 2010で作成したプロジェクトで、

    それを2017で開いてい編集しています。

    ちなみにポインタの表示以外にこういう現象は今のところ確認されていません。

    visual studio 2017 community 15.4.3です。

    2018年1月30日 5:08
  • visual studio 2015で開いたら表示出来ました。

    元々のプロジェクトが何で作ったのか、

    2010で作成したプロジェクトと2017の互換性の問題かもしれません。

    2018年1月30日 10:41
  • /clr オプションを有効にしているプロジェクトだからということでは?
    2015 だとデバッグで配列としてウォッチできますが、2017 だとできませんね。
    2018年1月30日 13:51
    モデレータ
  • そのclrオプションの設定はどこで出来るのでしょうか?

    そのオプション設定を無効にするとデバッグ時ウォッチ出来ると言う事でしょうか

    2018年1月31日 3:02
  • それらしいところを設定してみたのですが、その共通言語ランタイムのCLRがサポートしているコードが随所にあるプロジェクトだったようで、その設定をオフにした事で今度はビルドが出来なくなりました。なので今回は2015で開発をしようと思います。

    ■今回設定した箇所

    プロジェクト→プロジェクト名のプロパティ→C/C++→全般→共通言語ランタイムサポート「共通言語ランタイムサポート/clr」を「使用しない」に変更

    2018年1月31日 3:20
  • 既に試されている通り、CLR オプションが既に利用されているプロジェクトは安易にオフにできません。

    なお、このオプションを有効にしている場合、C++ とは大きく異なる、C++/CLI と呼ばれる言語、開発環境になるので、今後、質問される際はそのことを明示していただいた方がよいでしょう。

    • 回答としてマーク CSuser01234 2018年1月31日 6:10
    2018年1月31日 3:30
    モデレータ