GDB 如何打印矢量<bool>值
gdb how to print vector<bool> value
我只是调试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
,您就可以使用bitset
的to_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
相关文章:
- 写入向量<向量<bool>>
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 让bool方法返回其他整数
- 如何在 std::vector 中找到<bool>哪些索引是真的?
- Arduino-C++ bool 不会从 false 变为 true
- 为什么在这种情况下,bool 类型的输出等于 0?
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- 错误:不能使用"显式"说明符声明 bool'
- 为什么 C++ 11 在 ios 类中添加了运算符 bool
- 从标准::字符串到标准::矢量<bool>的快速转换
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 通过 mpi 发送 c++ 标准::矢量<bool>
- 为什么使用Pool和Bool而不是int8_t或char
- 如何为地图< map<int,int> 、bool > 分配值?
- 为什么更改包含 psapi.h 的顺序会产生编译错误?(标识符 BOOL 未定义)
- 使用 bool 和 const char 重载的 C++ 函数会在没有警告的情况下产生歧义 (MSVC2012)
- 返回 bool 作为 CPP 中 bool 运算符 [] 中的值