1

我有一个 C++ 测试项目,其中包含一堆具有相同实现的存根函数。这些存根旨在使用 Windows Detours 在运行时“替换”。问题是,在发布模式下,编译器使所有这些存根指向相同的实现。为了说明这一点,请考虑以下代码:

#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

尝试使用预处理器宏使您的存根函数独一无二,这样优化器就不会将它们合并为一个。

__FILE__、__LINE__ 和 __FUNCTION__ 在 C++ 中的用法

像这样的东西:

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