wince linux 性能,wince remote call profiler(性能分析)

如何使用

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

new1.jpg

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@]

prof1.jpg

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

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

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

prof3.jpg

到这一步,不知道大家有没有一个疑问,是不是我们的目标机器在编译镜像的时候必须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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端小知识点(4):JS 运行机制和存储

目录 被忽视的内存管理 JS工作原理 JS代码如何运行 JavaScript内存的生命周期 栈内存、堆内存 代码案例 运行结果 被忽视的内存管理 JavaScript不像C、C等语言——程序员必须通过调用内存管理接口,比如 malloc()和free(),自己手动分配和释放内存。…

201506230818_《JavaScript权威指南(第六版)——callee和caller、对象属性用作实参、自定义函数属性》(P175-180)...

1. callee 正在执行的函数。使用方法:arguments.callee... caller 正在调用执行函数的函数。 2.对象属性用作实参,形如:function fn(arg) { var arg.name name || Josn, arg.age age || 60 , ... } 3. 在传入实参时候,宁愿在检查…

VIM选择文本块

From: http://hi.baidu.com/mykledge/blog/item/d42e4d63f57232d48cb10d6c.html 在正常模式下(按ESC进入)按键v进入可视化模式,然后按键盘左右键或h,l键即可实现文本的选择。 其它相关命令: v:按字符选择。经常使用的模…

Linux ps aux查看进程

一、ps 命令 ps 是Process Status的缩写,用于查看进程状态,ps 可以显示linux系统的所有进程信息。 用法: ps a 显示现行终端机下的所有程序,包括其他用户的程序。ps -A 显示所有程序。 ps c 列出程序时,显示每个程序…

2010数据库SQL Server 盘点

让我们一起来盘点一下2010数据库SQL Server 发布了那些给力的新品。 1. 微软发布SQL Server 2008 R2 微软公司于2010年4月21日宣布推出Microsoft SQL Server 2008 R2。SQL Server 2008 R2已经可以看作是本年度的一次重量级发布。微软公司努力将SQL Server打造为一个信息平台&am…

linux下有四个作业优先级,第一次作业:对Linux系统分析

一.操作系统的组成1.无进程的内核在一些操作系统当中操作系统的内核在所有的进程之外执行。也就是说操作系统有自己的内存区域和系统栈,当进程发生 中断,陷阱或系统调用时,此进程的上下文环境被保存在系统栈中,控制权转移给内…

前端小知识点(6):听了好多闭包,这次可能最懂

目录 一、作用域和作用域链 二、闭包 三、无意间共享环境[可以通过闭包解决] 代码一 结果一 代码二 结果二 代码三 结果三 一、作用域和作用域链 当函数声明的时候,函数会通过内部属性[scope]来记录创建范围 二、闭包 什么是闭包:闭包是一个函数加…

Linux下如何挂载FAT32格式USB设备

From: http://hi.baidu.com/enovo/blog/item/c901eb249c0783064c088db3.html 挂u盘之前,运行命令cat /proc/partitions,看看现在系统中有哪些分区。插上u盘以后,再次运行上述命令,看看多出来什么分区.通常是sda1. 1、插入U盘 2、输入 fdisk…

Linux的Qt编译出现:-1: error: cannot find -lGL问题的解决方法

Qt是支持跨平台的C图形用户界面应用程序开发框架,在一个平台上开发好应用程序可以在多个平台方便移植。 在将windows平台上开发的Qt界面程序移植到Linux Ubuntu系统中,在构建项目时出现以下编译问题: error: cannot find -lGL。 即&#xf…

git rebase原理(转)

git rebase 不会取回代码 要用git fetch先取回, git rebase 是合并代码。 (1)首先用git fetch返回服务器上的代码 (2)首先用git rebase origin/master 合并 (3)如果发生冲突了会提示&#xff0c…

How to uninstall Internet Explorer 7

How to uninstall Internet Explorer 7 http://support.microsoft.com/kb/927177/en-us (1)如果没有安装SP3,请参考下文。 (2)如果安装SP3,请参考http://support.microsoft.com/kb/950719/en-us You cannot uninstall Internet Explorer 7 or Internet E…

前端小知识点(7):正则前瞻

目录 一、js中的正则表达式,只有前瞻没有后顾 正向前瞻:(?) 》匹配符合的 代码1 结果1 代码2 结果2 一、js中的正则表达式,只有前瞻没有后顾 正向前瞻:(?) 》匹配符合的 负向前瞻:(?!) 》匹配不…

c语言编译生成cpp,C语言的编译过程

编译: 编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。流程:C源…

VC++ 读取和保存文件对话框及默认目录

From: http://blog.csdn.net/miaoshengwu/article/details/1627283 void Openfile() {// TODO: Add your control notification handler code here//显示文件打开对话框CFileDialog dlg(TRUE, "EC", "*.aes", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, &qu…

设置启用树莓派的HDMI显示

树莓派所有的启动初始化都是在config.txt中完成的,因此,若插入HDMI树莓派没有显示桌面,则是没有配置HDMI。 首先在找到config.txt,两种方法: 第一种方法,将SD卡取出,用读卡器在windows上找到&…

c语言程序报告基本数据类型,C语言程序设计试验报告-基本数据类型和表达式-范本9(8页)-原创力文档...

PAGE安庆职业技术学院电子信息系实验报告(C语言程序设计)实验序号:第 1次实验名称:基本数据类型和表达式实验日期:实验成绩:90一、实验目的及要求(本次上机实践所涉及并要求掌握的知识点。)1.掌握C语言数据类型的种类和作用&#…

易经初学体会

易经初学体会 易经的占卜过程像是在做游戏,会让人对本来崇拜的神秘易经产生怀疑, 其实易经的占卜的推导过程是有科学依据的,是在长期实践和科学验算的过程中总结的公式,是古人对统计学的运用和总结,就像我们很难怀疑数…

前端小知识点(8):作者为什么设计原型

目录 一、从古代说起 二、Brendan Eich的选择 三、new运算符的缺点 四、prototype属性的引入 五、总结 六代码部分 一、从古代说起 要理解Javascript的设计思想,必须从它的诞生说起。 1994年,网景公司(Netscape)发布了Navi…

Windows 文件同步方案讨论

在日常运维工作中,经常会遇到这样的情况:我们需要在无人值守的情况下完成文件、文件夹的同步过程,已实现周期性的备份,避免单点故障。本研究实现了本地Windows主机与远程Windows主机,本地Windows主机与远程Linux主机目…

vs2008打开vs2010工程项目

From: http://blog.csdn.net/sonicrang/article/details/7387676 http://blog.csdn.net/godson_h/article/details/6575874 由于软件的向下兼容,vs2010可以打开vs2008项目,但是vs2008打开vs2010时会出现一些错误提示。解决办法如下:1. 替换…