[计算机软件及应用]如何使用远程工具跟踪 Windows CE 应用程序中的内存泄漏.doc

上传人:sccc 文档编号:4561835 上传时间:2023-04-27 格式:DOC 页数:31 大小:783.50KB
返回 下载 相关 举报
[计算机软件及应用]如何使用远程工具跟踪 Windows CE 应用程序中的内存泄漏.doc_第1页
第1页 / 共31页
[计算机软件及应用]如何使用远程工具跟踪 Windows CE 应用程序中的内存泄漏.doc_第2页
第2页 / 共31页
[计算机软件及应用]如何使用远程工具跟踪 Windows CE 应用程序中的内存泄漏.doc_第3页
第3页 / 共31页
[计算机软件及应用]如何使用远程工具跟踪 Windows CE 应用程序中的内存泄漏.doc_第4页
第4页 / 共31页
[计算机软件及应用]如何使用远程工具跟踪 Windows CE 应用程序中的内存泄漏.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《[计算机软件及应用]如何使用远程工具跟踪 Windows CE 应用程序中的内存泄漏.doc》由会员分享,可在线阅读,更多相关《[计算机软件及应用]如何使用远程工具跟踪 Windows CE 应用程序中的内存泄漏.doc(31页珍藏版)》请在三一办公上搜索。

1、如何使用远程工具跟踪 Windows CE 应用程序中的内存泄漏发布日期: 4/6/2005 | 更新日期: 4/6/2005Mike HallMicrosoft适用于:Microsoft Windows CE 5.01摘要:本文提供了有关调试工具的实践性概述,该调试工具可用于跟踪基于 Windows CE 的应用程序或驱动程序中的泄漏。您将针对运行在 Windows CE 仿真程序上的 Windows CE 5.0 操作系统映像来创建、自定义、构建、下载、调试以及使用远程工具。该实验大约需要 60 分钟完成。从 Microsoft 下载中心下载 Windows CE 5.0 Embedded

2、 Development Labs.msi。本页内容第 1 部分:创建平台映像第 2 部分:自定义和构建平台第 3 部分:下载平台第 4 部分:远程工具和内存泄漏第 5 部分:其他 Windows CE 远程工具小结第 1 部分:创建平台映像在 Platform Builder 内使用 New Platform Wizard 来创建初始平台工作区,之后通过添加应用程序以及更新注册表对其进行修改。单击 Start | AllPrograms | Windows CE 5.0 | Platform Builder 启动 Platform Builder。现在,就可以通过使用 Platform Wi

3、zard 来创建平台了。可以单击该缩略图以查看大图像。要创建新平台工作区1.选择 File | New Platform。 下图中的对话框概述了创建平台的过程。现在,需要按照向导的提示逐步执行,并进行相应的选择。 单击 Next。 如下图所示,New Platform Wizard 的下一步将提示您输入要构建的平台名称和位置。在 Microsoft Windows CE 4.2 中,将在 C:WINCE420PUBLIC 文件夹中创建自定义平台。Windows CE 5.0 会将自定义工作区分隔在一个名为 C:WINCE500PBWorkspaces新文件夹中。 2.输入名称 MyPlatfo

4、rm3.单击 Next。 通过选择 EMULATOR:X86 为 Windows CE 5.0 仿真程序构建一个操作系统,如下图所示。如果需要,可以选择多个参考板。然后,在构建时,可以选择构建和下载哪个平台。在硬件仍处于开发阶段时,选择仿真程序和参考板会比较有用,因为这样您可以在仿真程序中配置和测试操作系统映像,而无需物理硬件。 4.单击 Next。 现在,可以从许多示例平台中进行选择,或者,如果没有一个选项符合您的需要,则可以只选择 Custom Device 并根据从目录选取的组件来构建映像。 由于本教程的目的所在,您需要从平台配置列表中选择 Internet Appliance,如下图所

5、示。 5.单击 Next。 每个示例平台都有许多选项可供选择,而 Platform Wizard 只显示与您要构建的平台相关的选项。例如,在 headless 设备(例如,网关)中包括 Internet Explorer 或 WordPad 应用程序毫无意义。Internet 应用设备可以包括诸如 Internet 浏览器、Microsoft Windows Media Player 和 Microsoft Windows Messenger 之类的应用程序,也可以选择性地包含其他应用程序。可以通过包含来自目录的组件或从项目工作区中移除组件,以进一步对平台进行自定义。 在本例中,如下图所示,无

6、需 Microsoft .NET Compact Framework 或任何 Windows Media 组件,因此可以将这些项清除。 6.单击 Next。 在 Networking and Communications 页上,您可以看到 Windows CE 对个人网络、局域网及广域网均支持。如下图所示,在本例中,采用默认选项即可。 7.单击 Next。 如下图所示,即可完成向导。您已经配置了 Windows CE 平台,现在,通过向平台添加或从其中移除组件,可以对平台进行进一步的自定义。 8.单击 Finish。 现在,您就具有了包含所有选自 Platform Wizard 的 Windo

7、ws CE 组件的平台工作区。通过向工作区添加其他技术和特定于平台的驱动程序,可以进一步自定义该平台,或者,可以移除任何由向导添加但您的平台并不需要的组件。返回页首第 2 部分:自定义和构建平台在本部分练习中,您将执行以下过程: 启用分析内核和事件跟踪 创建 memLeak 应用程序,并将其添加到平台 创建 GDILeak 应用程序,并将其添加到平台 创建 Philosophers 应用程序,并将其添加到平台 配置 Philosophers 应用程序 构建平台 默认构建选项是生成操作系统的 Release 映像。如下图所示,使用工具栏从 Release 构建切换到 Debug 构建。现在就可开

8、始构建平台了。但是,在第 4 部分:远程工具和内存泄漏中,将使用 Remote Kernel Tracker 工具,因此,需要启用分析内核。要启用分析内核和事件跟踪1.选择 Platform | Settings。 2.在 Platform Settings 对话框上选择 Build Options 选项卡,如下图所示。 您会注意到之前的图示中,工具当前设置为构建平台的 Debug 映像。虽然启用了内核调试,但是要使用 Remote Kernel Tracker 工具,还需要启用分析内核和事件跟踪。3.选择 Enable Profiling。 4.选择 Enable Event Trackin

9、g During Boot。 5.单击 OK。 您已向自己的平台添加了三个应用程序:memLeak、GDILeak 和 Philosophers。这些应用程序的源代码已经被写入并存储在 Code Clip 应用程序中。现在,需要创建这些应用程序并将其添加到平台工作区。memLeak 应用程序是带有用户界面的 Windows 应用程序。您可以使用该应用程序来呈现调试区域以显示来自应用程序或驱动程序的重要调试信息、如何使用 Remote Performance Monitor 来监视操作系统内的内存负载,以及如何使用 CeLogData 将自定义数据项输出到 Remote Kernel Track

10、er 数据流中。memLeak 应用程序是多线程的,使用项目向导来创建该应用程序。本实验稍后部分,将对该应用程序中使用的代码进行分析。要创建 memLeak 应用程序并将其添加到平台1.选择 File | New Project or File。 2.选择 WCE Application,如下图所示。 3.在 Project name 框中,键入 MemLeak。 4.单击 OK。 5.键入您的特征信息,如下图所示,然后单击 Next。 如下图所示,出现三个选项:An empty project、A simple Windows CE application 或 a typical Hello

11、 World application。 6.选择 A simple Windows CE application。 7.单击 Finish。 项目向导已经创建了一个简单的 Win32 应用程序,该应用程序带有 WinMain 的入口点,无其他代码。现在需要向该应用程序添加一些代码。 1.在 Workspace 窗口中,选择 File View。 2.将工作区展开至 Projects | MemLeak | Source files。 3.双击 MemLeak.cpp。该步骤将打开 memLeak 应用程序的源代码。 4.选择该应用程序的所有代码。 5.按 DELETE 以删除所有代码。 6.从

12、桌面打开 Code Clip。. 7.找到并打开 Platform Builder Advanced Lab 项。 8.双击 MemLeak。该步骤会将 memLeak 源代码复制到剪贴板。 9.在 Platform Builder 中,选择 Edit | Paste,或右键单击 Paste。memLeak 代码被添加至代码窗口。 现在,可开始向平台添加第二个应用程序了:GDILeak。该应用程序是一个带有用户界面的 Windows 应用程序。GDILeak 应用程序将用于说明如何使用 Application Verifier 工具来检查应用程序的运行库。在编写 Win32 应用程序时,可能容

13、易忽略一个图形设备接口 (GDI) 句柄,创建该句柄是用于绘制应用程序的工作区的。每个未释放回操作系统的 GDI 句柄都泄漏 4 个字节。这个数量会随着时间的推移而增长,因此,需要运行 Application Verifier 工具来检查该应用程序的运行库。要创建 GDILeak 应用程序并将其添加到平台1.选择 File | New Project or File。 2.选择 WCE Application,如下图所示。 3.在 Project name 框中,键入 GDILeak。 4.单击 OK。 5.键入您的特征信息,如下图所示,然后单击 Next。 如下图所示,出现三个选项:An e

14、mpty project、A simple Windows CE application 或 a typical Hello World application。 6.选择 A simple Windows CE application。 7.单击 Finish。 项目向导已经创建了一个简单的 Win32 应用程序,该应用程序带有 WinMain 的入口点,无其他代码。现在,需要向该应用程序添加一些代码。 1.在 Workspace 窗口中,选择 File View。 2.将工作区展开至 C:WINCE500 | Projects | GDILeak | Source files。 3.双击

15、GDILeak.cpp。该步骤将打开 GDILeak 应用程序的源代码。 4.选择该应用程序的所有代码。 5.按 DELETE 以删除所有代码。 6.从桌面打开 Code Clip。 7.找到并打开 Platform Builder Advanced Lab 项。 8.双击 GDILeak。该步骤会将 GDILeak 源代码复制到剪贴板。 9.在 Platform Builder 中,选择 Edit | Paste,或右键单击 Paste。GDILeak代码被添加至代码窗口。 现在,可开始向平台添加最后一个应用程序了:Philosophers。该应用程序是一个带有用户界面的 Windows 应

16、用程序。在本例中,将使用“进餐的哲学家”问题,一个经典的多进程同步问题。该问题中,五位哲学家围桌而坐,他们只做两件事:思考和进餐。每位哲学家之间,有一支筷子。为了进餐,每位必须具备两支筷子。如果每个人都先取右侧的筷子,然后再拿左侧的筷子,会出现一个问题。在这种情况中,出现了僵局,所有的哲学家都会挨饿。而且,这些哲学家应当机会平等并且不会长时间占有筷子;因此,每位哲学家的进食量应当彼此相等。要创建 Philosophers 应用程序并将其添加到平台1.选择 File | New Project or File。 2.选择 WCE Application,如下图所示。 3.在 Project na

17、me 框中,键入 Philo。 4.单击 OK。 5.键入您的特征信息,如下图所示,然后单击 Next。 如下图所示,出现三个选项:An empty project、A simple Windows CE application 或 a typical Hello World application。 6.选择 A simple Windows CE application。 7.单击 Finish。 项目向导已经创建了一个简单的 Win32 应用程序,该应用程序带有 WinMain 的入口点,无其他代码。现在,需要向该应用程序添加一些代码。 1.在 Workspace 窗口中,选择 File

18、 View。 2.将工作区展开至 C:WINCE500 | Projects | Philo | Source files。 3.双击 Philo.cpp。该步骤将打开 Philo 应用程序的源代码。 4.选择该应用程序的所有代码。 5.按 DELETE 以删除所有代码。 6.从桌面打开 Code Clip。 7.找到并打开 Platform Builder Advanced Lab 项。 8.双击 Philosophers。该步骤会将 Philosophers 源代码复制到剪贴板。 9.在 Platform Builder 中,选择 Edit | Paste,或右键单击 Paste。Phil

19、osophers 代码被添加至代码窗口。 现在,要针对 Philosophers 应用程序来运行 Remote Call Profiler。为此,需要确保 Philo 项目配置正确。 要配置 Philosophers 应用程序1.在 File 视图中,右键单击 Philo Project(Philo 应用程序的顶部节点)。 2.选择 Settings。 3.选择并打开 Custom Variables,如下图所示。 4.单击 New,如下图所示。 5.在 Variable name 框中,键入 WINCECALLCAP,如下图所示。 6.在 Variable value 框中,键入 1。 7.

20、单击 OK。 您还需要为该项目生成 .map 文件。 1.在 Custom Variables 对话框中,单击 New。 2.在 Variable name 框中,键入 WINCEMAP,如下图所示。 3.在 Variable value 框中,键入 1。 4.单击 OK。 5.单击 OK。 现在,就可以开始构建平台了。要构建平台选择 OS Design View。 选择 Build OS | Sysgen。 注构建过程需要大约 10 分钟来完成。返回页首第 3 部分:下载平台在本部分练习中,您将执行以下过程: 配置调试和内核传输 下载操作系统 在下载操作系统映像之前,请检查以确保配置了调试和

21、内核传输。要配置调试和内核传输1.选择 Target | ConnectivityOptions。Target Device Connectivity Options 对话框打开,如下图所示。 2.在 Download 和 Transport 框中,选择 Emulator。 3.单击 Download 框旁边的 Settings。Emulator Download Settings 对话框打开,如下图所示。 您可以在该对话框中为 Windows CE 仿真程序设置下载选项。该仿真程序作为功能完整的 x86 CEPC 参考板运行,并通过使用开发计算机的硬件设备包括对网络设备、串行设备以及并行设备

22、的支持。 4.在 Memory 框中,选择 64。 5.单击 OK。 6.单击 OK 关闭 Target Device Connectivity Options 对话框。 现在,就可以开始下载操作系统了。要下载操作系统选择 Target | Attach Device。 将操作系统映像下载到该仿真程序。操作系统下载完成后,您会看到许多显示在 Platform Builder 中的调试消息。 返回页首第 4 部分:远程工具和内存泄漏在本部分练习中,您将执行以下过程: 使用 Remote Performance Monitor 工具来监视当前内存负载。 运行 memLeak 应用程序以在 Remo

23、te Performance Monitor 上显示泄漏 在 memLeak 应用程序中查看调试区域信息 使用 Remote Kernel Tracker 工具来查看当前内存负载 停止 memLeak 应用程序 Remote Performance Monitor 是一个图形工具,该工具用于估量 Windows CE 远程系统的性能。您可以查看诸如处理器、内存、线程以及进程等性能对象的行为。每个性能对象都具备一套相关性能计数器,用于提供有关用于设备使用率、队列长度以及延迟的信息,和用于测量吞吐量及内部拥塞的信息。Remote Performance Monitor 能够跟踪目标设备上的当前活动

24、,以及从日志文件查看数据。您将使用 Remote Performance Monitor 来监视参考板上的内存负载。该工具对于一段时间内的内存负载跟踪很有用;如果内存负载随时间增加,则该增加可能是当前运行着的进程和驱动程序的正常行为,或者,它可能表示内存泄漏。您将使用 memLeak 应用程序以说明如何使用 Remote Performance Monitor。要使用 Remote Performance Monitor 工具来监视当前内存负载1.在 Platform Builder 中,选择 Tools | Remote Performance Monitor。系统会提示您要连接至的设备。

25、2.展开 Windows CE Default Platform,然后选择 Default Device。 3.单击 OK。在连接到设备后,需要选择希望监视的性能项。在本过程中,需要监视内存负载。 4.选择 Edit | Add to Chart。Add to Chart 对话框中显示的默认对象是电源和电池状态,如下图所示。5.在 Object 框中,选择 CE Memory Statistics,如下图所示。 6.在 Counter 框中,选择 Memory Load。 7.单击 Add。 单击 Done。现在,Remote Performance Monitor 将显示当前内存负载,它应当

26、是一条没有起伏的直线。您可以从下图看出,操作系统正以大约百分之十七的内存负载在运行。 现在,运行泄漏内存的 memLeak 应用程序,并将泄漏显示在 Remote Performance Monitor 上。要运行 memLeak 应用程序以将泄漏显示在 Remote Performance Monitor 上1.在 Platform Builder 中,选择 Target | Run Program。Run Program 对话框将显示出 MyPlatform 工作区构建目录中的所有可执行程序,如下图所示。 2.从 Available Programs 列表中选择 MemLeak.exe。

27、3.单击 Run。 在 Remote Performance Monitor 中,您会注意到图形清楚地显示了系统中内存负载的变化,如下图所示。您也可以通过使用 GlobalMemoryStatus 应用程序编程接口 (API),直接从应用程序获取内存负载信息。 该性能监视器使用结束后,就可以关闭该工具了。 4.选择 File | Exit。 现在,memLeak 应用程序已运行,您可以开始探究调试区域了。区域允许开发人员将冗长的调试消息输出动态地更改为内核调试程序。这种更改在试图缩小问题原因的范围时非常有用。调试区域和 Windows CE Console Debug Shell 工具 (Ce

28、sh.exe) 能够通过使用宏,选择性地打开和关闭来自代码的调试消息输出。这允许您跟踪代码的执行状况,而无需暂停操作系统。跟踪是一种简单的非侵扰式的捕获代码中问题的方式,而不会导致操作系统停止响应。调试区域可以通过 Target Control 或 Platform Builder 集成开发环境 (IDE) 启用。调试区域通过在源代码中声明 DBGPARAM 结构来实现。在 dbgapi.h 中定义 DBGPARAM。DBGPARAM 包含三个元素。您可以通过 dbgapi.h 中的结构定义来查看这些元素。typedef struct DBGPARAM WCHAR lpszName32; /

29、field Name of module WCHAR rglpszZones1632; / field names of zones for first 16 bits ULONG ulZoneMask; / field Current zone Mask DBGPARAM, *LPDBGPARAM;以下代码示例说明了如何在 memleak 应用程序中定义 DBGPARAM 结构。在本例中,只需要定义三个区域:初始化、函数跟踪以及内存分配/释放。您还可以看到,初始化是作为默认区域启用的。可以为任何或所有其他区域添加跟踪。DBGPARAM dpCurSettings = TEXT(MemLeak

30、), TEXT(Init),TEXT(Trace Fn( );),TEXT(Memory),TEXT(), TEXT(),TEXT(),TEXT(),TEXT(), TEXT(),TEXT(),TEXT(),TEXT(), TEXT(),TEXT(),TEXT(),TEXT(), / By default, turn on the zones for init and errors. ZONEMASK INIT ; memLeak 应用程序与多数操作系统一样,构建时包含了调试区域信息。要查看 memLeak 应用程序中的调试区域信息1.在 Platform Builder 中,选择 Targe

31、t,然后选择 CE Debug Zones。Debug Zones 对话框出现,如下图所示。 2.单击 Name 列表中的 memLeak.exe,之后,您会注意到 Debug Zones 列表中的区域信息会进行动态更新。 通过示范区域,您将启用 Trace Fn() 消息。该选择将在应用程序分配和释放内存时,启用调试输出消息。 3.在 Debug Zones 列表中,选择 Trace Fn( );,如下图所示。 4.单击 OK。 以下是来自 memLeak 应用程序的输出。您可以看到应用程序流:AllocateMemory、UseMemory 以及 FreeMemory。您正在跟踪这些函数的

32、入口点和出口点。 -4294949561 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Enter - AllocateMemory( ) Function4294949563 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Leave - AllocateMemory( ) Function4294949563 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Enter - UseMemory( ) Function4294949564 PID:2dda5912 TID:4dda5d36 0x8dd806d

33、c: Leave - UseMemory( ) Function4294949564 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Enter - FreeMemory( ) Function4294949564 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Leave - FreeMemory( ) Function4294950065 PID:2dda5912 TID:4dda5d36 0x8dd806dc: -该输出只是显示了应用程序流,但是它没有提供有关内存分配的更多其他调试信息。您可以启用第二个调试区域以从应用程序获取更多信

34、息。接下来,将启用内存跟踪。 5.在 Platform Builder 中,选择 Target,然后选择 CE Debug Zones。Debug Zones 对话框出现。 6.单击 Name 列表中的 memLeak.exe,您会注意到 Debug Zones 列表中的区域信息会进行动态更新。 7.在 Debug Zones 列表中,选择 Memory。 8.单击 OK。 以下是来自 memleak 应用程序的更新调试信息。突出显示的区域显示了通过启用内存跟踪而增加的其他调试信息。 - 187306 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Enter -

35、AllocateMemory( ) Function 187306 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Check GlobalMemoryStatus( ) 187306 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Memory Load 24% 187307 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Allocate TCHAR *2048 (4096 UNICODE Characters) 187310 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Po

36、inter 0x310030 187310 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Leave - AllocateMemory( ) Function 187310 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Enter - UseMemory( ) Function 187310 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Do Something Interesting here. 187311 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Leave - U

37、seMemory( ) Function 187312 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Enter - FreeMemory( ) Function 187312 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Free Pointer 0x0 187312 PID:2dda5912 TID:4dda5d36 0x8dd806dc: Leave - FreeMemory( ) Function 187814 PID:2dda5912 TID:4dda5d36 0x8dd806dc: -在之前的输出中,您会看到从 0x310

38、030 的 LocalAlloc 函数返回了一个指针。您也可以看到,FreeMemory 函数调用 LocalFree 函数并传递一个为零的指针值。您可以假设没有使用相同的变量来分配和释放内存。 9.为平台工作区选择 ClassView。 10.展开 memleak 应用程序。展开的 memleak 应用程序显示了包含在 memleak 应用程序中的各种函数和变量,如下图所示。需要特别关注的是 AllocateMemory 和 FreeMemory 函数。 11.在 ClassView 选项卡上,双击 AllocateMemory 函数。 在以下代码示例中,正在分配 2048*sizeof(T

39、CHAR)。调用 LocalAlloc 的结果被存储在 g tcTemp 变量中。 if (g MemStatus.dwMemoryLoad 60) DEBUGMSG (ZONE MEMORY, (TEXT(Allocate TCHAR *2048 (4096 UNICODE Characters)n); g tcTemp=LocalAlloc(LPTR,(2048*sizeof(TCHAR); DEBUGMSG (ZONE MEMORY, (TEXT(Pointer 0x%lxn),g tcTemp); else 现在,可以考察 FreeMemory 函数了。 12.在 ClassView

40、选项卡上,双击 FreeMemory 函数。 可以清楚地看到,您要使用一个名为 g tc Temp 的变量来释放内存。该变量在应用程序初始化期间被初始化为 NULL。该示例使用了多个变量名。在该示例中,不正确的变量被释放了。 void FreeMemory( ) DEBUGMSG (ZONE TRACE, (TEXT(Enter - FreeMemory( ) Functionn); DEBUGMSG (ZONE MEMORY, (TEXT(Free Pointer 0x%lxn),g tc Temp); LocalFree(g tc Temp); DEBUGMSG (ZONE TRACE,

41、(TEXT(Leave - FreeMemory( ) Functionn);通过使用 Remote Kernel Tracker 工具,您可以查看线程交互、内部依赖项以及系统状态信息。该工具可显示出系统中的所有进程和线程;何时创建、运行或停止进程和线程;何时进程和线程休眠;系统中断以及系统事件。将这些系统事件映射到在其出现时执行的线程上。Remote Kernel Tracker 工具是跟踪实时事件的重要工具(在阅读实时文章时可了解到该工具的工作原理)。但是,如何使用 Remote Kernel Tracker 工具来跟踪内存呢?答案很简单,通过使用对 CeLogData API 的调用来进

42、行。在以下 memleak 应用程序的代码中,通过调用 GlobalMemoryStatus 会获得当前内存负载。然后,通过将该内存负载用作参数之一来调用 CeLogData。在本例中,无论何时分配内存,都要输出内存负载。您可以输出任何有用的信息,包括句柄、事件、线程、内存分配以及可用内存。MEMORYSTATUS g MemStatus;memset(&g MemStatus,0x00,sizeof(g MemStatus);g MemStatus.dwLength=sizeof(g MemStatus);GlobalMemoryStatus(&g MemStatus);DEBUGMSG (

43、ZONE MEMORY, (TEXT(Memory Load %d%n),g MemStatus.dwMemoryLoad);CeLogData(TRUE, CELID RAW LONG, &g MemStatus.dwMemoryLoad, (WORD) (sizeof(DWORD), 1, CELZONE MISC);要使用 Remote Kernel Tracker 工具查看当前内存负载1.在 Platform Builder 中,选择 Tools | Remote Kernel Tracker。系统会提示您要连接至的设备。 2.展开 Windows CE Default Platfor

44、m,然后选择 Default Device。 3.单击 OK。 Remote Kernel Tracker 工具将许多设备端组件下载到仿真程序。在下载完这些组件后,Remote Kernel Tracker 工具会显示出所有运行中的进程和中断。 4.在 Remote Kernel Tracker 工具,展开 Memleak.exe,如下图所示。 您会注意到显示的两个线程:第一个线程(标识为 Memleak.exe)是应用程序线程,第二个线程(标识为 ?MemoryThread)每隔 500 毫秒检查一次内存负载。如果内存负载低于百分之六十,则 ?MemoryThread 会分配 2048*TC

45、HAR。 因此,如何找到我们的自定义 CeLogData 信息?Remote Kernel Tracker 工具可以显示大量的信息。 5.右键单击 MemoryThread,如下图所示。 6.选择 Find Next Event on Thread。 Remote Kernel Tracker 工具将“跳”至选定线程上的下一个事件。您会注意到下图中,有一个带有四个点的白色方块。这个图形是自定义(或 CeLogData)项。 7.在白色方块上移动指针以查看“数据提示”。会显示代码输出的信息。 您会注意到,下图中显示的数据提示具有 Event Info Raw long, 14 该数据提示说明,在调用 CeLogData 时,内存负载为百分之十四。(该值根据系统可能会有所不同。) 8.关闭 Remote Kernel Tracker 工具。如果提示保存来自 Remote Kernel Tracker 工具的数据,请选择 No。 9.关闭 Remote Performance Monitor 工具。如果提示保存数据,请选择 No。 还需要停止 memLeak 应用程序,可利用两种方式来完成此操作:通过 Windows CE Target

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号