gdb如何打印vector <bool> value </bool>

时间:2014-12-04 18:31:04

标签: c++ command-line stl gdb

我只是在调试c ++程序而且我有价值

vector<bool> B(n, 0);

我的问题是如何在gdb控制台中打印它的值?因为eclipse IDE不太聪明,无法以可更新的格式呈现它。

当我有整数向量时,我可以做类似的事情:

 printf "%x %x %x", B[0], B[1], B[2]...

所以我能够阅读这个载体。但是布尔很难,因为printf没有格式来打印它,我也无法输入控制台p B [0]; p B [1] ......

所以也许有人知道如何调试这样的东西?

1 个答案:

答案 0 :(得分:3)

bitset是比vector<bool>更好的选择。

除了其他原因,因为它支持流操作符,因此您可以直接将此内容流式传输。

这当然假设数据类型在您的控制之下。

使用printf,您可以使用bitset的{​​{3}}

编辑回复to_string

如果无法使用bitset,则可以从GDB打印vector<bool>个元素,但需要了解如何在GCC中实现vector<bool>vector<bool>的索引运算符返回boolEnrico不是bool,而是为{{{}}提供转换运算符1}}。

在GCC中,bool有一个reference成员,它是指向为_M_p类分配的存储的指针,以及一个vector<bool>成员,可用于掩盖所有但索引位。这两者的组合产生零或非零值。零表示该位未设置,非零表示该位已设置。

对于_M_mask,您可以使用GDB命令打印此组合:

  

print *(foo [i] ._ M_p)&amp; FOO [I] ._ M_mask