用C ++拦截睡眠调用

时间:2015-03-31 18:29:25

标签: c++ c++11

有没有办法在C ++中拦截对睡眠和类似睡眠的函数的调用?我希望能够用无操作或替代方案替换实现,从而增加睡眠时间。我想这将有助于确定并发程序的正确性以及确定测试中的薄脆度来源。

我在巨大的代码库上运行,因此使用包装函数会不太令人满意。也许有一种方法可以使用ptrace或类似valgrind这样的程序拦截malloc的技术?

1 个答案:

答案 0 :(得分:6)

对于gcc用户,有一种简单的方法可以修改对库的一些调用,并在不改变代码本身的情况下链接自己的函数。

如果您有以下代码段:

... some stuff ...
AnyLibFunc();
... some stuff ...

您可以建议链接器使用包含以下行的包装方法:

gcc program.c -Wl,-wrap,AnyLibFunc -o program

你必须添加包装函数的实现:

void __wrap_AnyLibFunc ()
{
    __real_AnyLibFunc(  ); // call the real function
}

希望您正在开发gcc环境!