1

同じ実装を持つ多数のスタブ関数を含むC++テストプロジェクトがあります。これらのスタブは、WindowsDetoursを使用して実行時に「置換」されることを目的としています。問題は、リリースモードでは、コンパイラがこれらのスタブをすべて同じ実装を指すようにすることです。これを説明するために、次のコードについて考えてみます。

#include <iostream>
using namespace std;

void A() { cout << "stub" << endl; }
void B() { cout << "stub" << endl; }

void main()
{
    cout << &A << ", " << &B << endl;
}

デバッグモードでは、ポインタ値は異なります。リリースモードでは、それらは同じです。プラグマ最適化ディレクティブを試しましたが(Microsoftコンパイラを使用しています)、問題は修正されませんでした。その結果、私のWindows Detoursフックは、同一のスタブへのすべての呼び出しをインターセプトします。

どうすればこれを修正できますか?ありがとう。

4

1 に答える 1

1

プリプロセッサマクロを使用してスタブ関数を一意にし、オプティマイザがそれらを1つにマージしないようにしてください。

C ++での__FILE__、__ LINE__、および__FUNCTION__の使用法

このようなもの:

void A() { cout << __FUNCTION__ << endl; }
void B() { cout << __FUNCTION__ << endl; }
于 2012-11-23T08:58:11.210 に答える