现在的位置: 首页 > 综合 > 正文

Wince中的Debug Zones

2013年09月20日 ⁄ 综合 ⁄ 共 1829字 ⁄ 字号 评论关闭

Wince支持debug zone的概念,简单的说,所谓debug zone就是一种控制不同等级调试信息输出的机制。我们在开发应用程序的时候,为了调试,通常采用插桩的手段在代码中使用OutputDebugString,DEBUGMSG等函数和宏输出调试信息,然而大量的调试信息虽然方便了调试工作,但也常常导致查看这些调试信息变得麻烦,因为可能在一秒钟内输出数百数千条调试信息,根本没办法及时查看。

Debug zone就是为了解决这个问题而来的,我们可以定义一系列的debug zone,在代码中插桩的时候可以指定该信息的zone,只有该zone被使能后,属于这个zone的调试信息才会输出。通过控制使能不同的debug zone,可以只输出我们感兴趣的调试信息。

如何使用debug zones?

1.      首先定义你支持的debug zones和对应的bitmask,;说白了就是定义一系列常数,每个常数代表一个zone。例子:

  #define ZONEID_INIT   0

#define ZONEID_SECOND 1

#define ZONEID_EXCEPT 2

.

.

.

#define ZONEID_ERROR     15

下面定义对应的bitmask:

#define ZONEMASK_INIT     (1<<ZONEID_INIT)

#define ZONEMASK_SECOND   (1<<ZONEID_SECOND)

#define ZONEMASK_EXCEPT   (1<<ZONEID_EXCEPT)

.

.

.

#define ZONEMASK_ERROR    (1<<ZONEID_ERROR)

上面这些工作通常放在头文件中做。

2.      定义一个DBGPARAM结构的全局变量dpCurSettings,这个结构包括debug zone的相关信息,如:

   DBGPARAM dpCurSettings = {

   TEXT("DbgSamp1"), {

   TEXT("Init"),TEXT("Seconds"),TEXT("Except"),TEXT(""),

   TEXT(""),TEXT(""),TEXT(""),TEXT(""),

   (""),TEXT(""),TEXT(""),TEXT(""),

   TEXT(""),TEXT(""),TEXT("Warnings"), TEXT("Errors")},

   ZONEMASK_ERROR|ZONEMASK_INIT

};

 第一个变量TEXT("DbgSamp1")代表模块或应用程序的名称,这个名称应该与开发主机(不是目标机)注册表中debug zone初始化项对应。第2个变量TEXT("Init"),TEXT("Seconds"),TEXT("Except"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT("Warnings"), TEXT("Errors")},代表16zone的名称,这个名称可以随便指定,方便阅读。且次序要严格按照从第一个zone到第16zone来排列,就是说第一个TEXT(“Init”)对应的是ZONEID_INIT的名称;第3个变量ZONEMASK_ERROR|ZONEMASK_INIT指定startup时候默认开启的zone,比如如果设置第3个变量为0x8001,则表示第16个和第1zone被开启,其他的被关闭。

 

3.      注册DBGPARAM结构,这样系统的debugging subsystem才能识别你定义的debug zone;注册有两种办法,第一种是利用注册表,第二种是利用DEBUGREGISTERRETAILREGISTERZONE宏来注册

4.      至此就可以使用debug zone了,在代码中使用debug宏(如RETAILMSGDEBUGMSGDEBUGREGISTER等)添加调试信息,在这些宏中指定相应的debug zone

 

如何查看和改变debug zones

platform. builderTarget菜单选择CE Debug Zones,弹出一个对话框

在左边的列表中选择你想改变的模块/程序的debug zone,在右边列表中勾选你想开启的zone,确定即可。

抱歉!评论已关闭.