2012-12-14 19 views
7

Tôi có một kết xuất lõi và tôi đang xem kết xuất lõi với gdb.Làm cách nào tôi có thể thấy giá trị tăng :: bất kỳ khi nào tôi biết loại có gdb

Tôi đã tự hỏi nếu có một cách để có thể kiểm tra giá trị của một tăng :: bất kỳ giá trị nào trong gdb?

Trong cốt lõi, tôi đã có địa chỉ để tăng bất kỳ và vì vậy tôi đã cố gắng đúc nó vào một trình giữ chỗ để xem nếu tôi có thể kiểm tra giá trị, nhưng tôi đã giảm ngắn. Tôi biết rằng các loại tăng bất kỳ là unsigned dài như vậy là có một cách để xem bất kỳ giá trị biết loại?

(gdb) print ('boost::any::placeholder')(*(('boost::any'*)0x00007f263fa27730).content) 
warning: can't find linker symbol for virtual table for `boost::any::placeholder' value 
warning: found `boost::any::holder<bool>::~holder()' instead 
$129 = warning: can't find linker symbol for virtual table for `boost::any::placeholder' value 
warning: found `boost::any::holder<bool>::~holder()' instead 
warning: can't find linker symbol for virtual table for `boost::any::placeholder' value 
warning: found `boost::any::holder<bool>::~holder()' instead 
{ 
    _vptr.placeholder = 0x7f2a9a662560 
} 

Bất kỳ trợ giúp nào về vấn đề này sẽ được đánh giá cao. Cảm ơn!

+1

Bạn đã xem xét tăng bất kỳ nguồn nào chưa? Một tăng bất kỳ có chứa một con trỏ đến một chủ sở hữu, có loại con là templated trên loại tổ chức, nếu tôi nhớ lại một cách chính xác. Tăng bất kỳ chính nó không phải là một loại năng động, nó sở hữu một loại năng động. – Yakk

+1

Tôi tự hỏi liệu một người có thể viết một máy in khá gdb cho 'boost :: any'. Sau khi tất cả, bạn thậm chí không cần phải biết loại nội dung, vì con trỏ 'vtable' của loại được giữ biết loại nội dung là gì. Chúng ta cần nhiều máy in gdb đẹp hơn! – enobayram

Trả lời

1

boost::any có lớp nội bộ placeholder chứa nội dung dữ liệu. Hãy thử sử dụng:

(gdb) print (*((boost::any::holder<unsigned long>*)((anyInstance).content))).held 
Các vấn đề liên quan