【发布时间】:2010-10-13 16:53:24
【问题描述】:
MSVC 中有一些编译器选项可以在进入和退出函数时自动生成检测调用。这些钩子称为 _penter() 和 _pexit()。编译器的选项是:
/Gh 启用_penter挂钩功能
/GH 启用_pexit挂钩功能
是否有编译指示或某种函数声明会在每个函数的基础上关闭检测?我知道使用 __declspec(naked) 函数不会被检测,但这并不总是一个非常实用的选择。我在 PC 和非 X86 平台上都使用 MSVC,非 X86 平台在汇编程序中手动编写 Epilog/prolog 很痛苦(更不用说它会弄乱调试器堆栈跟踪)。
如果这仅基于每个文件(编译器选项),我想我将不得不将特殊功能拆分到一个单独的文件中以关闭该选项,但如果我可以控制它会容易得多以每个文件为基础。
如果无法做到这一点,后备计划是将函数移动到它们自己的 CPP 翻译单元并在没有选项的情况下单独编译。
【问题讨论】:
-
我认为最好有东西可以打开它。我相信它应该对个人资料非常有用。
标签: visual-c++ instrumentation pragma compiler-options