概述
c/c++如果在日志中查看某个结构体/类的每个变量名,变量值信息,只能通过printf逐个格式化,非常繁琐,如何做到类似protobuff转json的序列化功能呢?
该dll库先通过分析pdb文件获取结构体/类的变量名称、变量地址,并将指定的对象序列化成完整json字符串,极大降低了开发者工作量。
demo效果
在release下执行tcdumpTest.exe 看效果
注意:使用前先看‘使用说明.txt’,需要先注册\DIA SDK\bin\msdia120.dll。
- 定义类、结构体:
Class Ctest
{
Public:
Int M_i = 1;
Float M_f = 0.1;
Double M_d = 0.2;
Char M_c = 'a';
Std::String M_str = "Hello World";
Std::Vector<Int> M_v;
Std::Map<Int, Std::String> M_map;
};
- 赋值:
Ctest Test;
Test.M_v.Push_back(1);
Test.M_v.Push_back(2);
Test.M_v.Push_back(3);
Test.M_map.Insert({ 1,"hello" });
test.m_map.insert({ 2,"world" });
- 初始化tcDump,并序列化对象
int ret = TCDUMP_INIT(R"(..\tcDumpTest.pdb)");
if (ret == 0) {
std::cout << "load pdb failed !!!" << std::endl;
return 0;
}
// 打印 test 变量内容,已json格式输出
auto retJson = TCDUMP(test);
if (NULL == retJson) {
return false;
}
std::cout << retJson << std::endl;
- 序列化结果retJson输出

该博客介绍了一种方法,通过分析pdb文件获取C/C++结构体或类的变量信息,实现类似protobuf的序列化功能,简化日志中对象的查看。提供的demo展示了如何将类实例转换为JSON字符串,极大地减轻了开发者的工作负担。实现原理涉及对PDB文件的解析和对象的序列化过程。
1108

被折叠的 条评论
为什么被折叠?



