【问题标题】:How can I see a value of boost::any if I know the type with gdb如果我知道 gdb 的类型,如何查看 boost::any 的值
【发布时间】: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


【解决方案1】:

boost::any 有一个内部类placeholder 保存数据内容。尝试使用:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    相关资源
    最近更新 更多