2010-03-22 6 views
13

Używam rozwiązania makro, jak to jest opisane here. Istnieje jednak wzmianka o tym, jak je wyświetlać bez makr. Mam na myśli GDB w wersji 7 i wyżej.jak wyświetlić zawartość kontenerów STL za pomocą GDB 7.x

Czy ktoś mógłby zilustrować, w jaki sposób?

Dzięki

+0

której numerycznej wersji gdb mówisz o numerze –

+0

7 i nowszych. Dzięki. – vehomzzz

+0

Możliwy duplikat [Jak ładnie wydrukować kontenery STL w GDB?] (Https://stackoverflow.com/questions/11606048/how-to-pretty-print-stl-containers-in-gdb) –

Odpowiedz

21

Get widzów Pythona z SVN

svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python 

Dodaj poniższe linie do swoich ~/.gdbinit

python 
import sys 
sys.path.insert(0, '/path/to/pretty-printers/dir') 
from libstdcxx.v6.printers import register_libstdcxx_printers 
register_libstdcxx_printers (None) 
end 

Następnie druku powinien po prostu pracować:

std::map<int, std::string> the_map; 
the_map[23] = "hello"; 
the_map[1024] = "world"; 

W gdb:

(gdb) print the_map 
$1 = std::map with 2 elements = { [23] = "hello", [1024] = "world" } 

Aby wrócić do starego widoku print /r użytku (/r jest surowy).

Zobacz także: http://sourceware.org/gdb/wiki/STLSupport

+0

A jak właściwie użyć go w GDB, aby wydrukować zawartość? Czy trzeba coś ustawić? thx – vehomzzz

+0

Po załadowaniu kodu obciążenia .gdbinit, po prostu powinien działać, aby powrócić do starego widoku, robisz print/r (/ r jest dla raw) (formatowanie najwyraźniej jest do bani, moje przeprosiny) std :: map the_map; the_map [23] = "cześć"; the_map [1024] = "world"; (gdb) print the_map $ 1 = std :: map z 2 elementów = { [23] = "hello", [1024] = "świat" } – McBeth

+1

Rozważmy edycji odpowiedź na te informacje w swoim komentarzu . W ten sposób formatowanie nie będzie działać. – camh

2

W libstdcxx_printers dołączone są najnowsze wersje GCC, więc jeśli używasz GCC 4.5 lub nowsza wtedy nie trzeba robić nic, drukowanie całkiem po prostu działa.

(gdb) p v 
$1 = std::vector of length 3, capacity 3 = {std::set with 3 elements = { 
    [0] = 1, [1] = 2, [2] = 3}, std::set with 2 elements = {[0] = 12, 
    [1] = 13}, std::set with 1 elements = {[0] = 23}} 
(gdb) p v[1] 
$2 = std::set with 2 elements = {[0] = 12, [1] = 13} 

Aby wyłączyć ładna używać drukowania p/r lub print/r dostać „surowe” dane wyjściowe.

+0

Jak używać GCC do kompilowania programów w C++ do przeglądania kontenerów STL? Dzięki! – piyukr

+1

@piyukr jaka część odpowiedzi nie jest jasna? Nie musisz robić nic specjalnego. Jeśli pytasz o coś innego, zadaj nowe pytanie, nie dodawaj komentarza. –

+0

Używam g ++ -g test.cpp, a następnie gdb a.out, ale zamiast tego otrzymuję to wyjście .. [Zrzut ekranu] (http://imgur.com/a/KVbCa) – piyukr