如何用宏跟踪MFC序列化调用
How to trace MFC Serialize calls with Macros
我得到了一个MFC应用程序,它正在向磁盘写入一个巨大的对象层次结构。为了弄清楚写的是什么,我想把所有的电话都记录到存档<<通过将流插入和。write方法替换为宏
#pragma once
#ifndef LOGMAGIC
#define LOGMAGIC
class LogTab
{
public:
static int LogIndentCount;
LogTab()
{
LogIndentCount++;
}
~LogTab()
{
LogIndentCount--;
}
};
#define ARINSERT(AR,OBJ) TRACE( "%*s %sn", LogTab::LogIndentCount, #OBJ); AR << OBJ;
#define ARWRITE(AR,OBJ,SIZE) TRACE("%*s %sn", LogTab::LogIndentCount, #OBJ); AR.write(OBJ, SIZE);
#endif
所以我创建了上面的代码片段,并把它放在stdafx.h中,但我得到以下错误:
错误1错误LNK2001:未解决的外部符号"public: static intLogTab: LogIndentCount"(? LogIndentCount@LogTab@@2HA)
我做错了什么?有没有更好的方法来实现我正在做的事情?
您必须在任何一个。cpp文件中定义LogTab::LogIndentCount
#include"LogTab.h"
//...
int LogTab::LogIndentCount = 0;
[作为旁注,如果它是一个多线程系统,使用这个class
然后你可以考虑使LogIndentCount
同步(线程安全)]
静态变量必须显式初始化。
相关文章:
- 如何在C++中序列化结构数据
- 序列化,没有库的整数,得到奇怪的结果
- 如何知道QDataStream不能反序列化某些内容
- 如何使用Python从C++中读取谷物序列化数据
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 对象实例化调用构造函数的次数太多
- 自定义对象的dlib序列化在gcc中失败
- C++boost序列化多态性问题
- 为什么 zlib 放气初始化调用一次不起作用?
- 增强基于 XML class_id的反序列化
- 提升反序列化对象具有 nan 或 -nan 值
- 在 cpp 中的平面缓冲区中序列化对象
- 每次进行继承时都需要提升::序列化::base_object吗?
- 如何在 c++ 非托管代码中反序列化 byte[] 的 json 字符串?
- 崩溃:分段故障:增强序列化加载 - 用null调用构造函数
- 未调用序列化函数
- 派生对象的提升序列化不调用派生对象的序列化()
- 如何用宏跟踪MFC序列化调用
- 序列化io_service::post()的执行,只在单个线程中调用io_service::run()