Wince支持debug zone的概念,简单的说,所谓debug zone就是一种控制不同等级调试信息输出的机制。我们在开发应用程序的时候,为了调试,通常采用插桩的手段在代码中使用OutputDebugString,DEBUGMSG等函数和宏输出调试信息,然而大量的调试信息虽然方便了调试工作,但也常常导致查看这些调试信息变得麻烦,因为可能在一秒钟内输出数百数千条调试信息,根本没办法及时查看。
Debug zone就是为了解决这个问题而来的,我们可以定义一系列的debug zone,在代码中插桩的时候可以指定该信息的zone,只有该zone被使能后,属于这个zone的调试信息才会输出。通过控制使能不同的debug zone,可以只输出我们感兴趣的调试信息。
如何使用debug zones?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
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")},代表16个zone的名称,这个名称可以随便指定,方便阅读。且次序要严格按照从第一个zone到第16个zone来排列,就是说第一个TEXT(“Init”)对应的是ZONEID_INIT的名称;第3个变量ZONEMASK_ERROR|ZONEMASK_INIT指定startup时候默认开启的zone,比如如果设置第3个变量为0x8001,则表示第16个和第1个zone被开启,其他的被关闭。
3. 注册DBGPARAM结构,这样系统的debugging subsystem才能识别你定义的debug zone;注册有两种办法,第一种是利用注册表,第二种是利用DEBUGREGISTER或RETAILREGISTERZONE宏来注册
4. 至此就可以使用debug zone了,在代码中使用debug宏(如RETAILMSG,DEBUGMSG,DEBUGREGISTER等)添加调试信息,在这些宏中指定相应的debug zone。
如何查看和改变debug zones?
从platform builder的Target菜单选择CE Debug Zones,弹出一个对话框
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
在左边的列表中选择你想改变的模块/程序的debug zone,在右边列表中勾选你想开启的zone,确定即可。
文章评论(0条评论)
登录后参与讨论