如何用宏跟踪MFC序列化调用

How to trace MFC Serialize calls with Macros

本文关键字:序列化 调用 MFC 跟踪 何用宏      更新时间:2023-10-16

我得到了一个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同步(线程安全)]

静态变量必须显式初始化。