图四 远程文件浏览程序截图 3、 远程堆查看程序(Remote Heap Walker)
显然"Walker"不能翻译成"查看"。你愿意怎么翻译就怎么翻译吧。在这里我就叫查看了,这样容易理解。从名字就可以看出它是用来查看操作系统中每个进程使用的堆的情况。什么是堆就不用我说了吧!堆大家都了解,但是CE下关于堆的知识也值得一说。以后我会有专门讲述CE下进程、线程、和内存管理方面的文章发表,那时会说的非常详细。利用"远程堆查看程序"能够查看到:
内核中正运行的进程的名字、ID、及使用的所有的堆的ID。如图1所示
进程的一个堆中的首地址、结束地址、及标志(Fixed、Free)
堆中每块(Block)的实际内容 图 1 进程列表 查看和使用这个工具是很简单的事情。不过前提是你对堆有所了解。下面我说说和这个工具有关的涉及到堆的知识。CE下每个进程启动时,系统会自动分配 192KB的局部堆给这个进程。要是不够你就通过调用堆管理函数自己再分配自定义大小的堆。自己分配的堆,包括系统给你分配的堆,都由ID来标识。如图中所示的Heap ID。进程ID和进程名就不用说了。后面的"Flag"只有一个值"HF32_DEFAULT",表示系统默认分配的堆。图中的"device.exe",有四个都一样。但从进程ID就可以看出这是一个进程,而不是一个应用程序的四个实例。因为列表是以堆为单位, "device.exe"分配了四个堆,就显示了四个。
双击列表中任何一项,弹出这个堆的包含的块的列表。列出块的首地址、大小、标志。我们分配了一个堆,就可以在堆中分配数组、结构等。这个块就指每个分配的元素。标志中"Fixed"表示不能释放这个块占据的内存空间。而"Free"则相反,表示能够释放这个块占据的内存空间。看到这,也许你会有疑问,标志给谁看的?由谁释放啊?这涉及到内存的管理,内核的OOM组件。在以后的文章中我会做详细的解释。
再单击每个块,在弹出的列表中就可以看到这个块的具体数据了(用ASCII表示)。
4、远程内核跟踪程序(Remote Kernel Tracker)
远程内核跟踪程序用于跟踪实际平台内核的执行情况,一般使用它跟踪内核的启动情况,搜集相关数据并在开发平台上以图表形式显示出来。如图2所示。这个程序能够跟踪所有的进程和进程中的所有线程。从开始运行起跟踪,跟踪结束的时间由数据接收缓冲区的大小决定。缓冲区的大小从1MB到100MB,由用户自己设定。跟踪内容为进程的运行、不运行,线程的运行、阻塞、睡眠。还有在线程中所有发生的同步事件。在此程序的右边有所有能够跟踪的事件对应的图标。
要跟踪一个内核的启动情况(启动后也能使用这个程序跟踪所有进程、线程),先要使你要跟踪的内核具有几个特性。在PB菜单"Platform"- "Settings"-"Build Options"中复选"Enable Event Tracking During Boot"和"Enable Profiling"。然后重新编译整个内核。(注意PB在编译时可能提示产生错误,如果出现这种情况,那就重建内核)
编译成功后,先打开远程内核跟踪程序,在弹出的平台选择对话框中(上篇文章中包含此图)按"OK",这时立刻单击PB的 "Download/Initialize"调出模拟器。等待一会远程内核跟踪程序就将整个启动过程中发生的所有情况记录并显示出来。哪个时间段线程运行或睡眠或阻塞,包括发生了哪个中断都记录下来。缺点就是数据量太大。这个程序提供了查找功能和过滤功能。查找功能可以查找你想要找的事件,而过滤功能可以让此程序只记录你想要的事件。最后还可以保存这些记录数据。保存到扩展名为".clg"的文件中。
这个工具我只能讲这么多了,平时很少用到。
| |