12

map 要素への反復子があり、gdb にその反復子の「最初の」要素と「2 番目の」要素の値を表示してもらいたいと考えています。例えば:

std::map<int,double> aMap;
...fill map...
std::map<int,double>::const_iterator p = aMap.begin();

コードで p.first と p.second を使用できますが、gdb でそれらを確認できません。価値のあることとして、dbx では「print p.node.second_」のようなことを行うことができますが、gbd では同様のものを見つけることができます。

オブジェクト型を渡す関数を用意したいと思っていますが、それを機能させることもできませんでした。

何か案は?ありがとう!

4

5 に答える 5

18

これが私がそれを行う方法です:

This GDB was configured as "i686-pc-linux-gnu"...
(gdb) list
1       #include <iostream>
2       #include <map>
3
4       int main()
5       {
6           std::map<int, int> a;
7           a[10] = 9;
8           std::map<int, int>::iterator it = a.begin();
9           ++it;
10      }
(gdb) b test.cpp:9
Breakpoint 1 at 0x8048942: file test.cpp, line 9.
(gdb) r
Starting program: /home/js/cpp/a.out

Breakpoint 1, main () at test.cpp:9
9           ++it;
(gdb) set print pretty on
(gdb) p it
$1 = {
  _M_node = 0x94fa008
}
(gdb) p *it
$2 = (class std::pair<const int, int> &) @0x94fa018: {
  first = 10,
  second = 9
}
(gdb)
于 2008-11-26T22:16:37.170 に答える
4

p (*it)->second を使用できます

于 2010-01-28T20:14:36.223 に答える
2

主に C++ デバッグ エクスペリエンスの向上に特化した gdb 開発ブランチであるArcherを試すことができます。C++ 用のプリティ プリンターのデモを見るには、ここをクリックしてください。この新しいプロジェクトでは、Python スクリプトを使用して gdb を制御することもできます。主な開発者であるTom Tromeyは、この興奮したプロジェクトについてかなりの数のブログを書きました。

于 2009-05-08T01:29:08.060 に答える
2

これは古い質問であることは認識していますが、これに対する「最良の」答えをまだ見つけたと思います。いろいろ調べていると、stl 型をうまく逆参照する .gdbinit ファイルを見つけました。これには明らかに多くのバージョンが浮かんでいますが、これは私が見つけた最新のものです。

http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt

于 2013-01-18T12:34:45.517 に答える
1

pへのイテレータになるstd::pair<const int, double>ので、実際に必要なのはp->first. ただし、GDB がオーバーロードされた演算子を適切に処理するとは思わないため、おそらく{オブジェクトp.を表すメンバー} が必要です。libstdc++ のDoxygen ドキュメントがあるので、必要なメンバーを特定できます。この場合は. これはかなり冗長なので、最初に演算子のオーバーロードが機能するかどうかを確認します (いいえ、もっと単純なものはないと思います。申し訳ありません)。演算子を明示的に呼び出すこともできますが、gcc もそれを実行できないと思います (例: )。pair.first((_Rb_tree_node<pair<const int, double> >*)(p._M_node))-> _M_value_field.firstit.operator*().first

編集: 待って、litb の投稿は、gcc が * で演算子のオーバーロードをサポートしていることを示しているようです。奇妙なことに、私はいつもそれがうまくいかないことに気づきました!

于 2008-11-26T22:16:52.430 に答える