2010-04-21 14 views
12

Mam std :: map < std :: string, std :: string> cont;jak wydrukować wartość std :: map w gdb

Chcę zobaczyć cont ["some_key"] w gdb. Kiedy próbuję

p cd [ „some_ket”]

Dostaję komunikat: Jednym z argumentów Próbowano przekazać do operatora [] nie mogą być zamieniane na co funkcja chce.

Używam GNU gdb Red Hat Linux (6.3.0.0-1.162.el4rh). Dzięki

+3

Szkoda. gdb7.0 może go bezpośrednio wydrukować: http://sourceware.org/gdb/wiki/STLSupport –

+0

To jest właściwa odpowiedź. Ta funkcja już istnieje, używasz tylko starszej dystrybucji, która jej nie zintegrowała. Rozważ skorzystanie z najnowszej Fedory lub zbuduj narzędzia (może to być po prostu gdb, choć możliwe, że będziesz także potrzebował g ++ i binutils) ze źródła. –

Odpowiedz

6

Najnowsza wersja gdb ma obsługę python, więc można łatwo napisać funkcję drukowania zawartości dowolnej struktury STL. Jednak musisz nauczyć się API i napisać skrypt. Na szczęście gcc 4.5 zostanie dostarczony wraz z wymaganymi skryptami python, aby gdb mógł inteligentnie obsługiwać struktury danych stl.

EDYCJA: nie musisz czekać na GCC 4.5 (który zresztą już został wydany), możesz po prostu grab the code from SVN.

1

Gdb nie rozumie przeciążenia operatora C++.

+0

Jak rozumiem, nie ma możliwości zobaczenia pary klucz-wartość podczas debugowania? –

+0

Niełatwo. std :: map to złożona struktura danych. Możesz śledzić (zależnych od implementacji) prywatnych członków i zobaczyć, co się dzieje, ale to dość trudna sprawa. Odpowiedź @ Eddy może pomóc, ale w ogóle nie grałem z tymi rzeczami. –

6

Możesz napisać własne funkcje zrzutu i nazywają je:

(gdb) call dump(m) 

zobaczyć ten wątek: http://www.mail-archive.com/[email protected]/msg02109.html

jestem ciekawy temat makr pomocniczych GDB.

+1

[Następna wiadomość w tym wątku] (http://www.mail-archive.com/[email protected]/msg02189.html) pokazuje makro GDB, które działa bardzo dobrze. Kolejny komunikat zawiera drobne poprawki. – mMontu

Powiązane problemy