温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++中profile如何使用

发布时间:2021-07-19 17:55:30 来源:亿速云 阅读:194 作者:Leah 栏目:编程语言

这篇文章将为大家详细讲解有关C++中profile如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

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

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

extern "C" {  //void __stdcall _CAP_Profiling(void* func);  //void __stdcall _CAP_Start_Profiling(void* func, void* called);  //void __stdcall _CAP_End_Profiling(void* func);  void __stdcall _CAP_Enter_Function(void* func);  void __stdcall _CAP_Exit_Function(void* func);  }  void __stdcall _CAP_Enter_Function(void* func)  {  __asm  {  pushad //堆栈中按顺序压入寄存器: EAX,ECX,EDX,EBX,ESP,EBP,ESI和EDI  pushfd  }  //这里添加代码  __asm   {  popfd  popad  }  }  void __stdcall _CAP_Exit_Function(void* func)  {  __asm   {  pushad  pushfd  }  __asm   {  popfd  popad  }  }

关于C++中profile如何使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI