std::vector
or変数がstd::map
あり、その内容を確認したい場合、デバッグ中に n 番目の要素を確認するのは非常に面倒です。プラグイン、またはデバッグ中に STL コンテナー変数を簡単に監視できるようにするためのトリックはあります(VS2003/2005/2008)
か?
11 に答える
同時に複数の要素を見たい場合は、コンマと要素の数を次のように追加できます。
(v._Myfirst)[startIndex], count
ただし、count は定数でなければならず、別の式の結果であってはならないことに注意してください。
ベクターについては、msdn フォーラムのこのスレッドに、ベクター インデックスにウォッチを設定するためのコード スニペットがあり、役立つ可能性があります。
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] の下のものにのみ追加する必要があります。このファイルを変更する前に、注意してバックアップを作成してください。
カスタム ビジュアライザーを作成できます。これを確認してください: http://www.virtualdub.org/blog/pivot/entry.php?id=120
Visual Studio 2008 では、少なくとも私にとっては、標準のマウスオーバー コンテンツ ボックスに STL コンテナーのコンテンツが表示されます。
ウォッチ内の任意の値を右クリックして、[ウォッチを追加] を選択することもできます。これは、マップまたはセットの 1 つの要素のみを確認する必要がある場合に役立ちます。
また、christopher_f がベクトルについて投稿した解決策にもつながります - ((v)._Myfirst)[index]
上記のメソッド[((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) に変更します。
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
それが役に立ったことを願っています。