关于DebugView无法打印出DbgPrint信息

朋友调试一个Filter驱动程序,但终究无法在Debugview中打印出调试信息。
#if DBG

extern INT                filterDebugLevel;


#define DEBUGP(lev, stmt)                                               \
        {                                                               \
            if ((lev) <= filterDebugLevel)                             \
            {                                                           \
                DbgPrint("NDISLWF: "); DbgPrint stmt;                   \
            }                                                           \
        }

#define DEBUGPDUMP(lev, pBuf, Len)                                      \
        {                                                               \
            if ((lev) <= filterDebugLevel)                             \
            {                                                           \
                DbgPrintHexDump((PUCHAR)(pBuf), (ULONG)(Len));          \
            }                                                           \
        }

#define FILTER_ASSERT(exp)                                                \
        {                                                               \
            if (!(exp))                                                 \
            {                                                           \
                DbgPrint("Filter: assert " #exp " failed in"           \
                    " file %s, line %d\n", __FILE__, __LINE__);         \
                DbgBreakPoint();                                        \
            }                                                           \
        }
#endif //endDBG


要打印的东西其实很简单比如:
DEBUGP(DL_TRACE,("===>DriverEntry...\n"));

她以为总自己dbgprint()函数用错了,或者这个定义的宏有问题,估计是没有看清这个宏的定义,没有看清楚打印调试信息的条件,里面定义了debuglevel,这个值必须小于等于某个值的时候才打印出来,所以如果你在成功调试程序之后,可能不希望再打印出用于跟踪调试的信息,那么可能会把调试等级debuglevel的值调高。默认的调试等级定义如下:
//
// Message verbosity: lower values indicate higher urgency
//
#define DL_EXTRA_LOUD       20
#define DL_VERY_LOUD        10
#define DL_LOUD             8
#define DL_INFO             6
#define DL_TRACE            5
#define DL_WARN             4
#define DL_ERROR            2
#define DL_FATAL            0

之所以没有打印出来是因为debuglevel的值为:
INT             	filterDebugLevel = DL_WARN;

这下才恍然大悟~【DL_TRACE > DL_WARN】微软的代码其实这样写很方便,比如你需要自己在增添某些自己增加的调试信息,而不希望看见其他的原来的调试信息,就可以自己定义一个debuglevel值。然后在DEBUG宏里面做好选择判断就可以了。

你可能感兴趣的:(C++,c,C#)