2012-12-14 41 views
7

我有一個核心轉儲,我正在用gdb查看核心轉儲。如何知道boost :: any的值如果我知道gdb的類型

我想知道是否有辦法能夠檢查gdb中boost :: any值的值嗎?

在覈心,我有地址的提升任何和所以我試圖將它轉換爲佔位符,看看我是否可以檢查的價值,但我倒下了。我知道boost的類型是無符號的,所以有什麼方法可以查看知道類型的任何值?

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

任何有關此事的幫助將不勝感激。謝謝!

+1

你看過提升任何來源?如果我記得正確,任何一個boost都包含一個指向持有者的指針,其持有者的子類型是模板化的。 boost本身不是一個動態類型,它擁有一個動態類型。 – Yakk

+1

我不知道是否可以爲'boost :: any'寫一個gdb漂亮的打印機。畢竟,你甚至不需要知道內容的類型,因爲持有類型的'vtable'指針知道內容類型是什麼。我們需要更多gdb漂亮的打印機! – enobayram

回答

1

boost::any有一個內部類placeholder它保存數據內容。嘗試使用:

(gdb) print (*((boost::any::holder<unsigned long>*)((anyInstance).content))).held