2010-03-22 30 views
13

Tôi đã sử dụng giải pháp macro, vì nó được phác thảo here. Tuy nhiên, có một đề cập về cách xem chúng mà không có macro. Tôi đang đề cập đến GDB phiên bản 7 trở lên.cách xem nội dung của vùng chứa STL bằng GDB 7.x

Ai đó có minh họa không?

Cảm ơn

+0

phiên bản số của gdb nào bạn đang nói về –

+0

7 trở lên. Cảm ơn. – vehomzzz

+0

Bản sao có thể có của [Cách in các hộp chứa STL đẹp trong GDB?] (Https://stackoverflow.com/questions/11606048/how-to-pretty-print-stl-containers-in-gdb) –

Trả lời

21

Lấy người xem trăn từ SVN

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

Thêm tin sau vào tệp ~/.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 

Sau đó in chỉ nên làm việc:

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

Trong gdb:

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

Để quay trở lại quan điểm sử dụng cũ print /r (/r là dành cho nguyên).

Xem thêm: http://sourceware.org/gdb/wiki/STLSupport

+0

Và cách thực sự sử dụng nó trong GDB để in nội dung? Có gì cần phải được thiết lập không. thx – vehomzzz

+0

Khi mã tải đó nằm trong .gdbinit, sau đó in chỉ hoạt động, để quay lại chế độ xem cũ, bạn in/r (/ r là nguyên) (định dạng dường như hút trong nhận xét, lời xin lỗi của tôi) std :: bản đồ the_map; the_map [23] = "hello"; the_map [1024] = "thế giới"; (gdb) in the_map $ 1 = std đồ :: với 2 yếu tố = { [23] = "hello", [1024] = "thế giới" } – McBeth

+1

xem xét chỉnh sửa câu trả lời của bạn để bao gồm các thông tin này trong bình luận của bạn . Bằng cách đó, định dạng sẽ không hút. – camh

2

Các libstdcxx_printers được bao gồm trong phiên bản gần đây của GCC, vì vậy nếu bạn đang sử dụng GCC 4.5 hay muộn thì bạn không cần phải làm bất cứ điều gì, in ấn đẹp chỉ hoạt động.

(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} 

Để vô hiệu hóa việc sử dụng in ấn khá p/r hoặc print/r để có được "thô" đầu ra.

+0

Làm cách nào để sử dụng GCC để biên dịch các chương trình C++ để xem Vùng chứa STL? Cảm ơn! – piyukr

+1

@piyukr phần nào của câu trả lời không rõ ràng? Bạn không phải làm bất cứ điều gì đặc biệt. Nếu bạn hỏi một điều gì đó khác thì hãy hỏi một câu hỏi mới, đừng thêm bình luận. –

+0

Tôi đã sử dụng g ++ -g test.cpp rồi gdb a.out nhưng tôi nhận được kết quả này thay vào đó .. [Ảnh chụp màn hình] (http://imgur.com/a/KVbCa) – piyukr

Các vấn đề liên quan