朋友调试一个Filter驱动程序,但终究无法在Debugview中打印出调试信息。
要打印的东西其实很简单比如:
她以为总自己dbgprint()函数用错了,或者这个定义的宏有问题,估计是没有看清这个宏的定义,没有看清楚打印调试信息的条件,里面定义了debuglevel,这个值必须小于等于某个值的时候才打印出来,所以如果你在成功调试程序之后,可能不希望再打印出用于跟踪调试的信息,那么可能会把调试等级debuglevel的值调高。默认的调试等级定义如下:
之所以没有打印出来是因为debuglevel的值为:
这下才恍然大悟~【DL_TRACE > DL_WARN】微软的代码其实这样写很方便,比如你需要自己在增添某些自己增加的调试信息,而不希望看见其他的原来的调试信息,就可以自己定义一个debuglevel值。然后在DEBUG宏里面做好选择判断就可以了。
#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宏里面做好选择判断就可以了。