c++ - gdb 如何打印 vector<bool> 值

标签 c++ command-line stl gdb

我只是在调试c++程序,我很有值(value)

vector<bool> B(n, 0);

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

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

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

所以我能够读取这个 vector 。但是使用 boolean 很难,因为 printf 没有打印它的格式,我也无法在控制台 p B[0] 中输入; pB[1] ...

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

最佳答案

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

还有其他原因,因为它支持流操作符,所以你可以把这个东西流出来。

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

printf你可以使用 bitset to_string

编辑以回应 Enrico :

如果 bitset不能使用 可以打印 vector<bool>来自 GDB 的元素,但是如何 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

关于c++ - gdb 如何打印 vector<bool> 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27301336/

相关文章:

linux - 将命令行参数打印到新的 Linux tex 文件中

c++ - 搜索具有下限和上限的 map <pair<int, int>, ...>

c++ - 从结构创建二进制 block

c++ - 可搜索环形缓冲区

c++ - 否定 size_t (即 `-sizeof(struct foo)` ))会发生什么?

c++ - 开源可执行编辑器

c++ - 有效地从工作线程读取信息

c++ - 在可变数据结构中初始化共享指针 vector

oracle - 显示编码文本的命令行

git - 不要在 git grep 输出中显示 ^M(回车)