2

Visual Studioデバッガーのウォッチウィンドウ(または他の場所)でスタック上の変数のアドレスを確認するにはどうすればよいですか?

変数の読み取りは正常に機能します。

streets     streets [11790](0x1c66a690 [...] std::vector<Street *,std::allocator<Street *> >

ただし、接頭辞に&を付けてもアドレスはわかりません。

&streets        streets [11790](0x1c66a690 [...] std::vector<Street *,std::allocator<Street *> >

また、サイズを読み取ろうとしても機能しませんが、それはなぜですか?

streets.size()  CXX0075: Error: Cannot set up Function Evaluation   

プログラムはデバッグモードでコンパイルされます。

4

2 に答える 2

5

Visual Studio Debuggerは、 autoexp.datというファイルのスキーマによって定義された変換を通じてデバッガーウォッチ、クイックウォッチ、自動、およびローカル変数ビューを駆動します(VSバージョンによっては、その内容が大幅に異なる場合があります)。このファイルは、VS-InstallDir / Common7 / Packages / Debuggerフォルダーにあります(少なくともVS2010およびVS2012用です)。

これを知って、あなたが試して/検討するためのいくつかのアイデア:

方法1:図書館のノウハウ

ベクトル内の最初の要素の実際のアドレスにアクセスするには、最終的に次のようにします。

streets._Myfirst

表示する要素の数がわかっている場合は、次の方法で配列拡張拡張機能を使用できます。

streets._Myfirst,N

N要素の数はどこですか

注:これは、上記のベクトルでのみ機能します。使用しているコンテナによって、方法は異なります。おそらくstd::vector <>の実装にあまり依存しない、疑いの余地のないより単純な方法がありますが、これは私があなたをすばやく立ち上げてデバッグする方法を知っている最も単純な方法です。


方法2:焦土

[ツール]/[オプション]/[デバッグ]/[一般]の下に、オンとオフを切り替えることができる機能のリストがあります。それらの1つは、この質問に特に役立ちます。

変数ウィンドウにオブジェクトの生の構造を表示します。

これをオンにすると、std :: vector <>などの標準コンテナを含む、すべての構造とコンテナの生のメンバー変数が表示されます。これにより、 autoexp.datのテンプレートの使用が効果的に無効になります

于 2012-11-16T18:36:06.270 に答える
4

void *アドレスを確認するには、次のようににキャストします(void *)&streets

これは、ポイントされたベクターを直接表示することで役立つVisualStudioの試みです。同様の問題がベクトルの配列に影響します。

于 2012-11-16T18:48:43.773 に答える