我只是在调试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] ......
所以也许有人知道如何调试这样的东西?
答案 0 :(得分:3)
bitset
是比vector<bool>
更好的选择。
除了其他原因,因为它支持流操作符,因此您可以直接将此内容流式传输。
这当然假设数据类型在您的控制之下。
使用printf
,您可以使用bitset
的{{3}}
编辑回复to_string
:
如果无法使用bitset
,则可以从GDB打印vector<bool>
个元素,但需要了解如何在GCC中实现vector<bool>
。 vector<bool>
的索引运算符不返回bool
但Enrico不是bool
,而是为{{{}}提供转换运算符1}}。
在GCC中,bool
有一个reference
成员,它是指向为_M_p
类分配的存储的指针,以及一个vector<bool>
成员,可用于掩盖所有但索引位。这两者的组合产生零或非零值。零表示该位未设置,非零表示该位已设置。
对于_M_mask
,您可以使用GDB命令打印此组合:
print *(foo [i] ._ M_p)&amp; FOO [I] ._ M_mask