【发布时间】:2012-12-14 20:42:57
【问题描述】:
我有一个核心转储,我正在使用 gdb 查看核心转储。
我想知道是否有一种方法可以检查 gdb 中 boost::any 值的值?
在核心中,我有 boost any 的地址,因此我尝试将其转换为占位符以查看是否可以检查该值,但我没能做到。我知道 boost any 的类型是 unsigned long 那么有没有办法在知道类型的情况下查看 any 值?
(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
}
对于此事的任何帮助将不胜感激。谢谢!
【问题讨论】:
-
你看过 boost 的任何来源吗?如果我没记错的话,boost any 包含一个指向持有人的指针,其子类型是在持有的类型上模板化的。 boost any 本身不是动态类型,它拥有动态类型。
-
我想知道是否有人可以为
boost::any编写一个漂亮的gdb 打印机。毕竟,您甚至不必知道内容的类型,因为所持有类型的vtable指针知道内容类型是什么。我们需要更多 gdb 漂亮的打印机!
标签: c++ boost gdb backtrace boost-any