如何使用

1 建立工程,CPU类型必须于目标机型一致如ARMV4I,所以选择WCE Application,然后选择empty project

2 project settings 中,link页,Object/library modules中添加 cecap.lib(前面有空格),Ingore libraries中添加,libc.lib(前面有逗号).C/C++页Project Options最后添加 /callcap(前面有空格)

cecap.lib 在C:Program FilesCommon FilesMicrosoft SharedWindows CE ToolsPlatmansdkwce500lib 下(wce500是目标机器平台)

3 添加文件main.cpp,(文档中要求必须include文件cecap.h,实际上可以不包含该文件)

4 编译(确保Active Configuration是ARMV4I Debug)

5 运行Remote Call Profiler,连接到目标机器,如图,选择Start等待profilee运行(也可以拷贝profilee到目标机器,然后Launch)[@more@]

6 在EVC窗口上按CTRL+F5,下载运行Profilee

7 回到Remote Call Profiler,可以看到Profile Data不再是No Data,点击Finish

8 选择菜单上Top X View,选择刚才编译出来的profilee.exe(需要从中导入Debug信息,这也是我们要编译Debug版本的原因,否则看不到函数名等信息,只能看到函数偏移地址).可以看到,最耗时的函数列表

到这一步,不知道大家有没有一个疑问,是不是我们的目标机器在编译镜像的时候必须Enable Profiling.如果这样,Remote Call Profiler的用途就受到了很大限制,比如很多机器我们没有BSP或者Enable Profiling会导致应用的运行环境与最终产品有大的差异.所幸Enable Profiling不是必须的,看下面的原理:

原理及其进一步的应用用IDA反汇编profilee.exe,找到函数WinMain

.text:00011068 LDR R0, =WinMain

.text:0001106C BL _CAP_Enter_Function

.text:0001106C

.text:00011070 LDR R0, =s_Profilee

.text:00011074 BL NKDbgPrintfW

.text:00011074

.text:00011078 BL DoWork1

.text:00011078

.text:0001107C LDR R0, =s_End

.text:00011080 BL NKDbgPrintfW

.text:00011080

.text:00011084 LDR R0, =WinMain

.text:00011088 BL _CAP_Exit_Function

该处的源码是

NKDbgPrintfW (L"========== Profilee ==========rn");

DoWork1();

NKDbgPrintfW (L"========== END ==========rn");

可以看到,函数的开始处调用了_CAP_Enter_Function,结束处调用了_CAP_Exit_Function,显然这是由于添加了编译选项/callcap的缘故.而库cecap.lib提供了这两个函数的实现.实际上我们工程里的每一个函数都同WinMain类似,可以想象,_CAP_XXX函数可以得到函数的运行信息,并通过Remote Call Profiler以不同方式显示出来.

如果你觉得Remote Call Profiler不够爽,自己实现_CAP_XXX好了,在里面做任何你想做的事情

fastcap

第2步,编译选项从callcap改为fastcap,其他不变

同callcap相比,fastcap会计算出调用其他库函数的时间了(如系统函数Sleep)

反汇编如下

.text:00011070 LDR R1, =NKDbgPrintfW

.text:00011074 LDR R0, =WinMain

.text:00011078 BL _CAP_Start_Profiling

.text:00011078

.text:0001107C LDR R0, =s_Profilee

.text:00011080 BL NKDbgPrintfW

.text:00011080

.text:00011084 LDR R0, =WinMain

.text:00011088 BL _CAP_End_Profiling

.text:00011088

.text:0001108C LDR R1, =DoWork1

.text:00011090 LDR R0, =WinMain

.text:00011094 BL _CAP_Start_Profiling

.text:00011094

.text:00011098 BL DoWork1

.text:00011098

.text:0001109C LDR R0, =WinMain

.text:000110A0 BL _CAP_End_Profiling

.text:000110A0

.text:000110A4 LDR R1, =NKDbgPrintfW

.text:000110A8 LDR R0, =WinMain

.text:000110AC BL _CAP_Start_Profiling

.text:000110AC

.text:000110B0 LDR R0, =s_End

.text:000110B4 BL NKDbgPrintfW

.text:000110B4

.text:000110B8 LDR R0, =WinMain

.text:000110BC BL _CAP_End_Profiling

wince linux 性能,wince remote call profiler(性能分析)相关推荐

  1. wince开发板装linux,米尔i.MX28开发板上市 携Linux和WinCE系统

    近日,ARM工业控制企业米尔科技推出基于飞思卡尔芯片开发板:MYD-IMX28X开发板.该款开发板含MYD-IMX283和MYD-IMX287两个型号,分别基于飞思卡尔i.MX283和i.MX287芯 ...

  2. IOS使用Instrument-Time Profiler工具分析和优化性能问题

    背景 前不久我做了一个富文本编辑工具,编辑器遇到了一个性能问题是添加多张图片,当滚动编辑区域,遇到图片切换的时候会有明显的卡顿现象.这篇文章基于这个卡顿的性能问题进行性能瓶颈的分析以及做对应的优化. ...

  3. MySQL的SQL Profiler性能分析器

    MySQL从5.0开始提供了SQL Profiler性能分析器,其主要用途是显示sql执行的整个过程中各项资源的使用情况.这个工具可以很好的展示出SQL的性能问题. 下面我们从五个角度并举例介绍MyS ...

  4. Visual Studio 2008 查找耗时函数 C++ Profiler 性能 优化

    用事实说话,C++ Profiler(Visual Studio 2008) 1.设置"生成时启用C/C++代码分析"为"是",如果不设置此项,程序速度将出乎你 ...

  5. 【飞秋】SQL Server性能调教系列(4)--Profiler(上)

    一:简介 在处理性能问题是,DBA倾向于关注系统技术层面,如资源队列,资源利用率,系统loading等.而用户只把性能问题认为是等待,他们从业务逻辑层面发出一个请求,等待返回结果,后台数据库就需要去响 ...

  6. 查看linux内存优化,Linux性能优化和监控系列(三) 分析Memory使用状况

    Linux性能优化和监控系列(三) 分析Mem 分析Memory使用状况 内存是影响服务器性能的一个主要因素, 当进程已经驻留内存或者系能够分配给进程足够的内存给它, CPU能顺利自如的运行. 如果发 ...

  7. CentOS 7 Linux实时内核下的epoll性能分析后续 | 火焰图分析

    在<CentOS 7 Linux实时内核下的epoll性能分析>从源码角度分析了epoll在实时内核和非实时内核之间的差异,为了更好的展示问题所在,这里给出epoll和select在实时内 ...

  8. CentOS 7 Linux实时内核下的epoll性能分析

    CentOS 7 Linux实时内核下的epoll性能分析 rtoax 2021年3月4日 1. 问题引入 一些参考链接见文末. 1.1. 测试调试环境 非实时环境: 3.10.0-1062.el7. ...

  9. Android Studio CPU profiler性能分析工具介绍和使用详解

    Android Studio CPU profiler性能分析工具介绍和使用详解 CPU profiler介绍 Android Studio CPU 性能剖析器可实时检查应用的 CPU 使用率和线程活 ...

最新文章

  1. 【转】主要空间数据挖掘方法
  2. JSP学习总结:2006
  3. 编写有效用例电子版_软件测试人员必须编写代码吗?
  4. unique Signatures of Histograms for local surface description
  5. code block下使用openMP
  6. 速达软件无法打开帐套数据库/一般性网络错误
  7. apm系统服务器,APM系统简单对比(zipkin,pinpoint和skywalking)
  8. 原生滑动选择器 html,html选择器
  9. CentOS 6.X yum源更新(阿里云默认最新更新为CentOS6.10)
  10. linux mtd 指令,mtd交叉编译mkfs命令
  11. c语言自动安装打印机驱动,安装自定义的即插即用打印机驱动程序
  12. 云服务器系统esxi,云服务器安装esxi
  13. matlab中在同一图形窗口中绘制出一个周期内的正弦曲线和余弦曲线,多选(3分) 在一个图形窗口同时绘制[0,2π]的正弦曲线、余弦曲线,可以使用命令( )。...
  14. 2020年全球及中国自动化设备发展现状及市场竞争情况分析,本土企业加速布局,未来可期「图」
  15. 经典论文翻译--Minimum Snap Trajectory Generation and Control for Quadrotors
  16. 【web项目】前端生日礼物--注册页面篇
  17. centos6.5(Linux)下搭建SVN服务器
  18. 1.1Android的发展和历史
  19. java中拼接和 的区别_浅析Java中String与StringBuffer拼接的区别
  20. JAVA计算机毕业设计新锐台球厅管理系统计算机(附源码、数据库)

热门文章

  1. linux update语句,MySQL 多表 update sql语句总结
  2. 计算机应用计算机电算化题库,2014年浙江省会计电算化客观题题库
  3. 使用html记笔记,开始学习HTML,并记下笔记
  4. java中显示动态信息的方法_java里的动态表单技术
  5. debian 访问 windows 共享_【续】windows环境redis未授权利用方式梳理
  6. MySQL5.7更改用户名密码
  7. 常用注入 Script 方法
  8. Exynos4412 文件系统制作(三)—— 文件系统移植
  9. python多线程编程(1): python对多线程的支持
  10. 显示当前行号、文件名和函数名(二)