繁体   English   中英

gdb如何打印矢量 <bool> 值

[英]gdb how to print vector<bool> value

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

vector<bool> B(n, 0);

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

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

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

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

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

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

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

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

使用printf您可以使用bitsetto_string

编辑回应Enrico

如果无法使用bitset可以从GDB打印vector<bool>元素,但是需要了解如何在GCC中实现vector<bool> vector<bool>的索引操作符没有返回一个bool但一个vector<bool>::reference这不是一个bool但提供了一个转换操作符到一个bool

在GCC中,此reference具有_M_p成员,该成员是指向为vector<bool>类分配的存储的指针,以及一个_M_mask成员,可用于屏蔽除索引位之外的所有内容。 这两者的组合产生零或非零值。 零表示该位未设置,非零表示该位已设置。

对于vector<bool> foo您可以使用GDB命令打印此组合:

print *(foo [i] ._ M_p)&foo [i] ._ M_mask

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM