0

MSVC には、関数の開始時および終了時にインストルメンテーション呼び出しの自動生成を有効にするコンパイラ オプションがあります。これらのフックは、_penter() および _pexit() と呼ばれます。コンパイラのオプションは次のとおりです。

/Gh _penter フック機能を有効にする

/GH _pexit フック機能を有効にする

関数ごとにインストルメンテーションをオフにするプラグマまたはある種の関数宣言はありますか? __declspec(naked) 関数を使用しても計測されないことはわかっていますが、これは常に非常に実用的なオプションではありません。PC と X86 以外のプラットフォームの両方で MSVC を使用していますが、X86 以外のプラットフォームでは、アセンブラーでエピローグ/プロローグを手動で記述するのが面倒です (デバッガーのスタック トレースが台無しになることは言うまでもありません)。

これがファイル (コンパイラ オプション) ごとにのみである場合、特殊関数を別のファイルに分割してオプションをオフにする必要があると思いますが、それを個別に制御できれば、はるかに簡単になります。ファイルベース。

これができない場合のフォールバック計画は、関数を独自の CPP 翻訳単位に移動し、オプションなしで個別にコンパイルすることです。

4

2 に答える 2

2

これを行う方法がわかりません。とにかく影響を受けるすべての関数を見つけて処理する必要があることを考えると、おそらくそれらを独自のモジュールに移動することはそれほど大したことではありません。

于 2010-10-13T17:26:34.993 に答える