有没有办法打印所有类数据

时间:2017-02-18 07:49:57

标签: c++ logging dump

所以我想将所有网络转储I日志打印为可读数据。我已成功将记录的转储映射到它们各自的结构(使用memcpy),现在希望打印相同的类值(本身不定义print()函数)。

使用Qt调试器(如果我没记错的话,使用gdb),我可以使用断点查看甚至将值复制到文件中。考虑到应用程序可能需要一些时间来处理并将转换转换为可读数据,我是否可以自动化将调试信息复制到文件中的系统?

我已经浏览了gdb文档,无法找到相同的任何功能。大多数在线解决方案包括为每个类创建print()函数。

问题与How to get all properties/variables of a class at runtime/dynamically in C++有何不同: 问题是如何获取可变数据类型@ runtime。另一方面,我在编译期间定义数据类型(在* .h头文件中包含所有结构信息,甚至将所有值映射到变量)。问题主要在于可以通过调试器查看数据以进行打印;我希望自动显示并将其复制到文件/控制台上。

1 个答案:

答案 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:内圈在小端和大端系统上不一样。