在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 ,然后解析输出,但必须有更好的方法。
答案 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标志获取确切版本。