Hlavní navigace

STL v GDB

7. 10. 2011 21:43 (aktualizováno) Marek Zukal

Malý problém. Nikdy mě to moc netrápilo, ale dneska jsem ladil nějaký kód, kde byla data uložena jen ve vektorech a těžko se z nich tahala ven a problém mě začal trochu pálit. Po chvilce googlení jsem se dostal na tuto stránku: http://www.yolinux.com/TUTORIALS/GDB-Commands.html

Jde o velice pěkné shrnutí příkazů pro GDB(samozřejmě funkčních i v DDD), ale ukazuje i jak se vypořádat se zapeklitostí STL. Stačí použít tento skriptík pro GDB http://www.yolinux.com/TU­TORIALS/src/dbinit_stl_vi­ews-1.03.txt (lze nakopírovat do ~/.gdbinit nebo natáhnout přímo z GDB příkazem source) a všechny STL kontejnery jsou najednou krásně dostupné. Příklady použití jsou dostupné přes odkaz výše. Pro pořádek jen stručný přehled příkazů pro výpis jednotlivých kontejnerů:

std::vector<T> -- via pvector command
std::list<T> -- via plist or plist_member command
std::map<T,T> -- via pmap or pmap_member command
std::multimap<T,T> -- via pmap or pmap_member command
std::set<T> -- via pset command
std::multiset<T> -- via pset command
std::deque<T> -- via pdequeue command
std::stack<T> -- via pstack command
std::queue<T> -- via pqueue command
std::priority_queue<T> -- via ppqueue command
std::bitset<n> -- via pbitset command
std::string -- via pstring command
std::widestring -- via pwstring command

Myslím, že to určitě někomu může přijít vhod. Pokud někdo znáte lepší způsob, nezapomeňte se pochlubit v diskuzi.

Sdílet

  • 18. 5. 2009 23:14

    limit_false (neregistrovaný)

    AFAIK nejlepsi nastroj na debugovani je Qt Creator. Pri prekladu vytvori malou knihovnu (libgdbmacros), kterou natahne do gdb. S ni umi zobrazit obsah STL/Qt kontejneru.

    Zatim jedinou nevyhodu co znam je, ze nejde nastavit, pro ktere knihovny se maji nacitat symboly (pro kod velikosti v radu ~3-4M LOC to je na zabrane pameti celkem znat; v 0.9.1 to jeste slo pres ~/.gdbinit).