2010-10-13 74 views
0

MSVC中有编译器选项可以在进入和退出功能时自动生成仪表调用。这些钩子被称为_penter()和_pexit()。编译器选项有:MSVC _penter和_pexit挂钩可以在每个函数基础上禁用吗?

/Gh的启用_penter钩子函数

/GH启用_pexit钩子函数

是否有编译或某种函数的定义,将关闭在每个功能的基础上使用仪器?我知道使用__declspec(裸体)函数不会被检测到,但这并不总是一个非常实用的选项。我在PC上和非X86平台上都使用MSVC,非X86平台在汇编器中手动编写epilog/prolog是一件痛苦的事情(更不用说它扰乱了调试器堆栈跟踪)。

如果仅在每个文件(编译器选项)的基础上,我认为我将不得不将特殊功能拆分为单独的文件来关闭该选项,但如果我可以控制它会容易得多它在每个文件的基础上。

回退计划,如果这个不能做的是正义之举的功能,以自己的CPP翻译单元和没有选择单独编译。

+0

我认为最好有一些东西可以打开它。我相信它应该对配置文件非常有用。 – Chang 2011-12-29 02:38:34

回答

2

我没有看到任何方式来做到这一点。鉴于你必须找到并处理每个受影响的函数,也许将它们移到自己的模块中并不是什么大不了的事情。

+0

我希望有一个像__declspec(dontinstrument)或类似的东西。 – Adisak 2010-10-13 18:15:29

+0

@Adisak - 对 - 我不认为有这样的事情要做。 – 2010-10-13 18:24:13

+0

是的......我没有看到另一种方式来自己做。但问问并不容易。 – Adisak 2010-10-13 19:26:22