Probleme beim debuggen mit STL Set
-
Hallo,
ich schreibe ein Programm, in dem ich mehrere sets aus der STL benutze. Ich habe aber ein Problem, bei dem mir die Suchfunktion und auch Google nicht weiter helfen konnten. Ich kann im Debugger nämlich nicht nachschauen, welche Elemente ein set gerade enthält. Das set selber mit seinen Eigenschaften wird angezeigt, die Elemente, die es enthält aber nicht. Ich arbeite unter Linux mit kdevelop. Zum Testen habe ich folgenden Code genommen:
std::set<int> intSet; intSet.insert(10); intSet.insert(2); intSet.insert(4); std::set<int>::iterator iter; for(iter=intSet.begin(); iter!=intSet.end(); iter++) { std::cout << *iter << std::endl; }Das Programm gibt dann auch die Zahlen 2, 4 und 10 aus. Wenn ich das Programm nach der for-Schleife anhalte steht das hier im Debugger-Fenster:
Variable Wert Typ intSet std::set<int,std::less<int>,std::allocator<int> > _M_t std::_Rb_tree<int,int,std::_Identity<int>,std::less<int>,std::allocator<int> > _M_impl std::_Rb_tree<int,int,std::_Identity<int>,std::less<int>,std::allocator<int> >::_Rb_tree_impl<std::less<int>,false> <std::allocator<std::_Rb_tree_node<int>> std::_Rb_tree<int,int,std::_Identity<int>,std::less<int>,std::allocator<int> >::_Rb_tree_impl<std::less<int>,false> <__gnu_cxx::new_allocator<std::_Rb_tree_node<int> >> <No data fields> std::_Rb_tree<int,int,std::_Identity<int>,std::less<int>,std::allocator<int> >::_Rb_tree_impl<std::less<int>,false> _M_key_compare std::less<int> <> <No data fields> std::less<int> _M_header std::_Rb_tree_node_base _M_color std::_S_redstd::_Rb_tree_color _M_parent 0x804c038 std::_Rb_tree_node_base * ... _M_left 0x804c008 std::_Rb_tree_node_base ... _M_right 0x804c020 std::_Rb_tree_node_base * ... _M_node_count 3 size_tSollten unter _M_key_compare oder irgendwo anders nicht die drei Integer 10, 2 und 4 stehen?
Ich habe das Programm auch einmal mit dem Debugger ddd laufen lassen, der zeigt aber auch das gleiche an.
Dem Kompiler habe ich die Option -g zum Debuggen mit gegeben.
Was muss ich einstellen, dass ich die Werte im Debugger sehen kann? Ich will ja nicht an allen Stellen, an denen ich das set untersuchen will, die for-Schleife von oeben rein kopieren und nachher wieder löschen.Schon mal vielen Dank für eure Antworten
-
Die Werte des set's werden üblicherweise in einem Binärbaum untergebracht, also müsstest du dich durch die Zeigerstruktur durchahngeln, die unter dem _M_Header aufgebaut ist (bist du sicher, daß zwischen den ... keine _M_Value (oder so ähnlich) Einträge zu finden sind, wo die einzelnen Werte stehen?).
Ansonsten: Die STL-Klassen sind eigentlich recht zuverlässig (wenn du sie nicht zweckentfremdet hast) - da ist es normalerweise nicht nötig, sie zu debuggen. Und wenn doch, bleibt noch die Möglichkeit, den Inhalt aus dem Programm heraus auszugeben.
-
Ich will ja nicht die STL Klassen debuggen, sondern nur zur Laufzeit gucken, welche Elemente gerade im set drin sind, weil in meinem Programm irgendwo eine Fehler steckt, den ich nicht finde.
Unter _M_header gibt es vier Elemente: _M_color, _M_parent, _M_left und _M_right. _M_parent, _M_left und _M_right haben wieder diese vier Elemente unter sich, die wieder _M_color, _M_parent, _M_left und _M_right haben, usw. Ich kann mich da soviel durch hangeln wie ich will, es kommen aber immer wieder nur diese Elemente. Einen int-Wert finde ich da nicht.