查找正在运行的valgrind版本

时间:2014-07-07 14:34:03

标签: c++ c valgrind avx

在C / C ++中,我可以包含valgrind头文件,以便在运行时知道我的软件是否在valgrind上运行:

#include <valgrind/valgrind.h>

bool RunningOnValgrind() 
{
    return RUNNING_ON_VALGRIND ? true : false;
}

valgrind manual中记录了这一点。

我希望能够知道我运行的valgrind是否支持AVX指令。如何编写返回此信息的函数?

valgrind release notes开始,我知道从版本3.8开始支持这些版本。因此,一种解决方案是生成一个进程来执行 valgrind --version ,然后解析输出,但必须有更好的方法。

2 个答案:

答案 0 :(得分:3)

如果查看valgrind / valgrind.h,你会发现在包含valgrind.h之后你可以用这种方式检查valgrind版本号:

  #if defined(__VALGRIND_MAJOR__) && defined(__VALGRIND_MINOR__)   \
      && (__VALGRIND_MAJOR__ > 3                                   \
          || (__VALGRIND_MAJOR__ == 3 && __VALGRIND_MINOR__ >= 8))
    /* code to say avx is supported */
  #endif

这有很多局限性:它假设您使用的是全局安装的版本,并且您的路径未指向某个不在默认位置的用户构建的个人valgrind(我已经完成了并且它还假设您正在运行valgrind的机器上构建,而不是在预先构建的可执行文件(根据我的经验经常发生的事情)附近运送,因此您不能依赖它。

考虑到这一点,使用valgrind --version生成子流程并检查输出可能真的是最佳选择。

答案 1 :(得分:2)

您可以使用 VALGRIND_MAJOR 在运行时检测版本,或使用--version标志获取确切版本。