C++ profile应用技巧分析

开发 后端
也许有很多人都对C++ profile还不是很了解,因为这一功能自从VC6之后就被去掉了。不过在特定情况中我们还是需要这一功能来帮助我们完成一些操作。

想必用过C++编程语言的开发人员会发现,这一应用广泛的计算机应用语言确实比较复杂,要想完全弄清其中的功能特点,是一个非常艰巨的任务。在这篇文章中我们先来了解一下C++ profiler的简单用法。#t#

自从VC6以后,C++ profile功能便从Team Server Editions以外的版本中去掉了,如果没有此版本的VC,只能自己动手了。这是另一种使用Profile的方法,根据MSDN关于/callcap 的说明,编译WinCE应用程序时可以使用这个开关,试过后在Win32平台上也可以。这里需要注意的是在_CAP函数中,***不修改寄存器,那样可能导致被调用的函数产生错误。

另外,如果直接把函数实现和调试的程序放在一个项目中编译,将会使CAP函数产生递归调用而导致堆栈溢出,处理方法是在一个静态库中不使用/callcap编译,然后再联接到调试的程序中。这种方式调试函数仍然不太方便,只能知道一个函数指针,无法知道函数名称。

 

  1. extern "C" {  
  2. //void __stdcall _CAP_Profiling(void* func);  
  3. //void __stdcall _CAP_Start_Profiling(void* func, void* called);  
  4. //void __stdcall _CAP_End_Profiling(void* func);  
  5. void __stdcall _CAP_Enter_Function(void* func);  
  6. void __stdcall _CAP_Exit_Function(void* func);  
  7. }  
  8. void __stdcall _CAP_Enter_Function(void* func)  
  9. {  
  10. __asm  
  11. {  
  12. pushad //堆栈中按顺序压入寄存器: EAX,ECX,EDX,EBX,ESP,EBP,ESI和EDI  
  13. pushfd  
  14. }  
  15. //这里添加代码  
  16. __asm   
  17. {  
  18. popfd  
  19. popad  
  20. }  
  21. }  
  22. void __stdcall _CAP_Exit_Function(void* func)  
  23. {  
  24. __asm   
  25. {  
  26. pushad  
  27. pushfd  
  28. }  
  29. __asm   
  30. {  
  31. popfd  
  32. popad  
  33. }  

以上就是对C++ profile的相关介绍。

责任编辑:曹凯 来源: 博客园
相关推荐

2010-02-01 11:13:00

C++ Traits

2010-02-06 13:47:08

C++标准扩展

2010-02-06 17:09:29

C++文件拷贝

2010-02-04 14:58:06

C++内存分配

2010-02-01 17:09:07

C++链表操作

2010-02-05 13:44:06

C++ eof()函数

2010-02-06 17:21:20

C++ CreateT

2011-05-30 15:29:32

C++

2011-04-11 14:29:11

C++输出格式

2010-01-28 17:14:38

Visual C++应

2010-02-05 13:52:04

C++资源管理

2010-02-06 14:28:38

C++标准输入输出

2010-02-06 16:16:01

C++冒泡排序

2010-02-05 18:04:21

C++剪切板

2010-02-01 17:37:35

C++调用C链接库

2011-07-10 15:26:54

C++

2010-02-03 16:04:34

C++标准类库

2010-01-22 16:35:41

C++开发

2010-01-26 17:11:13

C++编程

2010-02-03 15:35:00

C++输入输出汉字
点赞
收藏

51CTO技术栈公众号