Under the hood

互联网上新生活
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
这篇要介绍的是我自己写的一个用于监控Windows CE运行时系统状态的工具-Windows CE Remote Process Explorer。2004年我开始从事Windows CE平台的开发,之前我对Windows CE几乎一无所知,为了了解Windows CE的系统机制,我利用业余时间写了这个工具。到目前为止,它已经具有了相当多的功能,也帮我解决了很多工作上的问题。

简介

如果你想监控CE下每个进程、线程的CPU使用率,或者想知道每个线程被什么模块什么时刻创建、线程当前的调用栈,或者想知道应用程序运行一段时间后进程堆的使用情况、内存碎片的分布,等等,这个工具都能给你直观的答案。

Windows CE Remote Process Explorer(以后简称CE Process Explorer)是一个和Mark RussinovichProcess Explorer类 似的工具,只不过它应用于Windows CE系统。CE Process Explorer通过Platform Manager和Windows CE device建立连接,正如其名字所提示的,和Windows CE的Remote File Viewer一样,CE Process Explorer是一个Remote tool。其host端运行在PC上,通过TCP/IP等传输介质和device端通信,来揭示Windows CE的运行时系统状态。和Mark的Process Explorer侧重点不同的是,CE Process Explorer是为WinCE平台的开发人员设计的,更侧重于揭示系统的内部数据。

支持平台

目前CE Process Explorer支持ARM和X86(包括emulator)架构,MIPS和SH4架构我没用过,暂时不能支持。支持的目标操作系统包括Windows CE 4.x/5.0,对Windows CE 6.0的支持正在考虑中。

界面介绍

如下图所示,类似于Process Explorer,主界面由上下两个View组成。上面的view显示Process列表,下面的view可以显示当前所选Process的 Thread、Dll、Handle、Window、Heap或Memory信息。每个View都有对应的context menu,比如在进程view中你可以杀掉一个进程,在线程View中可以查看某个线程当前的调用栈。


1,Process View。淡蓝色背景的进程为非ROM模块。


2,Thread View。淡蓝色背景的线程为主线程。Thread View中可以看到每个thread是由哪个模块创建的,这对问题诊断是非常有帮助的。


3,Handle View。


4,DLL View。黄色背景的DLL为重定位过的DLL。


5,Window View。淡蓝色背景的窗口为顶级窗口。


5,Heap View。淡蓝色背景free内存块。


7,Memory View。在Memory View中你可以看到整个系统的虚拟内存的布局,你可以找到哪些是Image文件映射,Thread Stack、Heap在什么地方,DLL加载在哪里等等。

部分特色功能(Highlights)

1,显示线程调用栈(call stack)。这是我最喜欢的功能之一。它可以在运行时显示任意线程的调用栈,观察线程的工作状态。在有debug symbol的情况下,可以直接定位到源代码行。


2,应用程序的进程堆视图。可以让你时刻观察应用程序对堆的使用情况,红色部分为碎片。


3,定位异常地址(Crash Finder)。应用程序崩溃是常有的事,这个功能让你可以从异常产生的地址直接定位到源代码行。

Data Abort: Thread=87809d44 Proc=818a7b20 'INSTALLER.EXE'
AKY
=00000401 PC=00012548(INSTALLER.EXE+0x00002548) RA=00012530(INSTALLER.EXE+0x0
0002530) BVA=16000000 FSR=00000007