原创 Wince中的Debug Zones

2009-8-6 18:39 3034 10 10 分类: MCU/ 嵌入式

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")},代表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,弹出一个对话框


4677a810-9817-4eda-915e-32306b017371.jpg


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


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

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条