35

std::vectoror変数がstd::mapあり、その内容を確認したい場合、デバッグ中に n 番目の要素を確認するのは非常に面倒です。プラグイン、またはデバッグ中に STL コンテナー変数を簡単に監視できるようにするためのトリックはあります(VS2003/2005/2008)か?

4

11 に答える 11

20

同時に複数の要素を見たい場合は、コンマと要素の数を次のように追加できます。

(v._Myfirst)[startIndex], count

ただし、count は定数でなければならず、別の式の結果であってはならないことに注意してください。

于 2008-09-19T20:57:09.917 に答える
14

ベクターについては、msdn フォーラムのこのスレッドに、ベクター インデックスにウォッチを設定するためのコード スニペットがあり、役立つ可能性があります。

于 2008-09-19T20:00:46.027 に答える
11

VS2005 および VS 2008 では、STL コンテナーの内容を確認できます。データを取得するための規則は、autoexp.dat "c:\Program Files\Microsoft Visual Studio 9\Common7\Packages\Debugger\autoexp.dat" にあります。

AutoExp.dat はカスタマイズするためのものです。ただし、STL 定義は [Visualizer] というセクションの下にあります。そのセクションで使用されている言語を理解できれば、より強力になりますが、その部分はそのままにしておくことをお勧めします.

Autoexp.dat は VS2003 に存在しましたが、STL コンテナーのサポートはありませんでした ([Visualizer] は存在しませんでした)。VS2003 では、基になるデータ表現を手動でナビゲートする必要があります。

autoexp.dat を変更することで、独自の型のデータ表現をナビゲートするための規則を追加できるため、デバッグが容易になります。これを行う場合は、[AutoExp] の下のものにのみ追加する必要があります。このファイルを変更する前に、注意してバックアップを作成してください。

于 2008-09-21T18:28:50.973 に答える
5

カスタム ビジュアライザーを作成できます。これを確認してください: http://www.virtualdub.org/blog/pivot/entry.php?id=120

于 2008-09-19T20:18:56.857 に答える
3

Visual Studio 2008 では、少なくとも私にとっては、標準のマウスオーバー コンテンツ ボックスに STL コンテナーのコンテンツが表示されます。

于 2008-09-19T20:13:13.067 に答える
1

ウォッチ内の任意の値を右クリックして、[ウォッチを追加] を選択することもできます。これは、マップまたはセットの 1 つの要素のみを確認する必要がある場合に役立ちます。

また、christopher_f がベクトルについて投稿した解決策にもつながります - ((v)._Myfirst)[index]

于 2008-09-19T20:53:36.417 に答える
1

上記のメソッド[((v)._Myfirst)[index]]は、考えられるすべての STL コンテナーではなく、特定のコンテナー (std::vector) に対してのみ機能します。たとえば、std::deque のコンテンツを表示したい場合は、std::deque のコンテンツを参照する他の方法を探す必要があります。

問題を解決するために、次の同様の設定を試すことができます

[この設定は、Microsoft Visual Studio 2010 Service Pack 1 と共にインストールされた Visual Studio 2010 Professional バージョンでのみテストしました]

ステップ 1: Microsoft Visual Studio 2010 Service Pack 1 をアンインストールします。私のプロジェクト作業では、Service Pack 1 は実際には必要ないので、Service Pack 1 をアンインストールしても問題は発生しません。

ステップ 2: システムを再起動します。

手順 3: エラー 'LINK: 致命的なエラー LNK1123: COFF への変換中にエラーが発生しました: ファイルが無効または破損しています' が表示されない場合、この手順は必要ありません。それ以外の場合はブラウズ

プロジェクトのプロパティ -> リンカー (一般) -> インクリメンタル リンクを有効にするをいいえ (/INCREMENTAL:NO) に変更します。

于 2013-08-06T15:38:02.153 に答える
0

vs 2015では、これらのいずれも機能しなかっ
たため、少しコードを書きました

1:長い長い要素のベクトルのベクトルがありました

std::vector<std::string> vs(M_coins + 1);
for (unsigned long long i = 0; i <= M_coins; i++) {
    std::for_each(memo[i].begin(), memo[i].end(), [i, &vs](long long &n) {
        vs[i].append(std::to_string(n));
        });
}
// now vs is ready for use as vs[0], vs[1].. so on, for your debugger

基本的に私がしたことは、ベクターを文字列に変換することでした。ベクトルのベクトルがあったので、塗りつぶす文字列ベクトルがありました。

2: long long 要素のベクトルだけがある場合は、次のように変換します。

std::vector<std::string> s;
std::for_each(v1.begin(), v1.end(), [&s](long long &n) {
    s.append(std::to_string(n));
    });
// now s is ready for use, for your debugger

それが役に立ったことを願っています。

于 2016-06-08T05:33:31.357 に答える