4

根据他们的示例,我正在尝试使用 Valgrind 拦截一个函数。

使用 gcc 构建时,我能够拦截全局函数,但是当我使用 g++ 编译相同的代码时,拦截不起作用。

我应该指定的编译器标志有什么特别的吗?

这是我的示例应用程序:

#include <stdio.h>
#include "valgrind.h"

__attribute__ ((noinline))
void foo()
{
    printf("inside foo\n");
}

void I_WRAP_SONAME_FNNAME_ZU(NONE,foo)()
{
   OrigFn fn;
   VALGRIND_GET_ORIG_FN(fn);
   printf("*** Before foo()\n");
   CALL_FN_v_v(fn);
   printf("*** After foo()\n");
}

int main()
{
    foo();
    return 0;
}

使用 GCC 编译时,输出为:

*** Before foo()
inside foo
*** After foo()

但是,当使用 g++ 编译时,输出很简单

里面 foo

4

1 回答 1

1

G++ 对没有extern "C". 因此,您应该找到一个错误的名称(例如 with nm object)并在您的 valgrind 代码中使用它。或者你可以重写你的目标程序来使用一个extern "C"函数。

于 2011-02-22T11:38:06.760 回答