所以我想将所有网络转储I日志打印为可读数据。我已成功将记录的转储映射到它们各自的结构(使用memcpy),现在希望打印相同的类值(本身不定义print()函数)。
使用Qt调试器(如果我没记错的话,使用gdb),我可以使用断点查看甚至将值复制到文件中。考虑到应用程序可能需要一些时间来处理并将转换转换为可读数据,我是否可以自动化将调试信息复制到文件中的系统?
我已经浏览了gdb文档,无法找到相同的任何功能。大多数在线解决方案包括为每个类创建print()函数。
问题与How to get all properties/variables of a class at runtime/dynamically in C++有何不同: 问题是如何获取可变数据类型@ runtime。另一方面,我在编译期间定义数据类型(在* .h头文件中包含所有结构信息,甚至将所有值映射到变量)。问题主要在于可以通过调试器查看数据以进行打印;我希望自动显示并将其复制到文件/控制台上。
答案 0 :(得分:-1)
转储原始对象就像获取指向对象的char
指针一样简单,并且只要对象的大小就打印数据。它显然无法访问存储在指针中的数据,只能访问它们的地址。
由于您已准备好将memcpy
输出作为格式,因此以下是相同的代码:
struct large_object fi;
...
char* pt = (char*)&fi;
for (size_t i = 0; i < sizeof(fi); ++i)
{
printf("%1x", *(pt + i));
}
printf("\n");
如果需要,您还可以在添加另一个循环时获得逐位输出:
for (int bit_to_print = sizeof(char)-1; bit_to_print < 0; --bit_to_print)
{
printf("%d", *(pt + i) & (1 << bit_to_print);
}
PS:内圈在小端和大端系统上不一样。