简体   繁体   中英

Finding which version of valgrind is running

in C/C++, I can include valgrind headers to know at runtime whether or not my software is running on valgrind :

#include <valgrind/valgrind.h>

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

This is documented in the valgrind manual .

I would like to be able to know if the valgrind I am being run on supports AVX instructions. How do I write a function that returns this information ?

From valgrind release notes , I known that these are supported from version 3.8 onwards. Hence one solution would be to spawn a process to execute valgrind --version and then parse the output but there must be a better way.

If you look in valgrind/valgrind.h, you see you can check valgrind version number this way after including valgrind.h:

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

This has many limitations, however: it assumes you are using a globally-installed version, and that your path isn't pointing to some personal, user-built valgrind that isn't in the default location (which I have done) and it also assumes that you are building on the machine where you will run valgrind, and not shipping around a pre-built executable (which in my experience is something that happens often) so you can't rely on that.

With that in mind, spawning a sub-process with valgrind --version and checking the output may truly be the best alternative.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM