C++ 查找正在运行的valgrind版本

C++ 查找正在运行的valgrind版本,c++,c,valgrind,avx,C++,C,Valgrind,Avx,在C/C++中,我可以包含valgrind标头,以便在运行时知道我的软件是否在valgrind上运行: #include <valgrind/valgrind.h> bool RunningOnValgrind() { return RUNNING_ON_VALGRIND ? true : false; } #包括 bool RunningOnValgrind() { 返回运行在VALGRIND上?真:假; } 这在中有记录 我想知道我正在运行的valgrind是否支

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

#include <valgrind/valgrind.h>

bool RunningOnValgrind() 
{
    return RUNNING_ON_VALGRIND ? true : false;
}
#包括
bool RunningOnValgrind()
{
返回运行在VALGRIND上?真:假;
}
这在中有记录

我想知道我正在运行的valgrind是否支持AVX指令。如何编写返回此信息的函数


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

如果您查看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
生成子进程并检查输出可能确实是最好的选择。

如果您查看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
生成子进程并检查输出可能是最好的选择。

您可以使用valgrind\u MAJOR在运行时检测版本,或者使用--version标志获取准确版本。

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

您所述的限制正是我需要在运行时而非编译时获取版本的原因!正如我的帖子所暗示的,这对我来说很有意义。然而,valgrind似乎没有一个API,您可以在运行时调用它来检索主/次版本号,因此在子流程中运行它并解析输出可能就是您剩下的—希望您不要在valgrind中使用
--trace children=yes
选项运行您的程序(就像使用valgrind一样)获取版本号的“valgrind自身”可能是Slooow…)向valgrind的bug跟踪器提交了一个修补程序:。让我们看看现在发生了什么…您所说的限制正是我需要在运行时而不是编译时获取版本的原因!正如我的帖子所暗示的,这对我来说很有意义。但是,valgrind似乎没有API,您可以在运行时调用它来检索主/次版本ers,所以在子进程中运行它并解析输出可能就是您剩下的-希望您不是在valgrind中使用
--trace children=yes
选项运行您的程序(因为让valgrind“valgrind本身”获取版本号可能会很慢…)已向valgrind的bug跟踪器提交修补程序:。让我们看看现在发生了什么…valgrind_MAJOR提供了编译时使用的版本,而不是valgrind的运行时版本。valgrind_MAJOR在编译时定义,您可以在运行时为我们提供。valgrind_MAJOR提供了编译时使用的版本,而不是valgrind.valgrind_MAJOR的运行时版本在编译时,您可以在运行时使用它。