GDB 如何打印矢量<bool>值

gdb how to print vector<bool> value

本文关键字:lt bool gt 何打印 打印 GDB      更新时间:2023-10-16

我只是调试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] ...

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

bitset

vector<bool>更好的选择。

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

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

有了printf,您就可以使用bitsetto_string

编辑以回应恩里科:

如果无法使用bitset,则可以从GDB打印vector<bool>元素,但是需要了解vector<bool>如何在GCC中实现。 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