Fipsified VLD (Visual Leak Detector)
VLD: https://github.com/KindDragon/vld
fips: https://github.com/floooh/fips
Only works on Windows (the import will be ignored when compiling for other platforms).
First make sure to update fips itself (the feature to detect custom build configs in imported project is new)!
Add fips-vld as import to your project's fips.yml file:
imports:
fips-vld:
git: https://github.com/floooh/fips-vld.git
Run 'fips fetch' to fetch fips-vld from github:
In your toplevel CMakeLists.txt or fips-include.cmake file, check for the FIPS_USE_VLD, and if this is set, setup a C preprocessor define of your choice (all following examples are taken from the Oryol 3D engine):
# use Visual Leak Detector?
# see https://github.com/floooh/fips-vld
if (FIPS_USE_VLD)
add_definitions(-DORYOL_USE_VLD=1)
endif()
Now in one of your source files, include the vld.h header if the define is set:
#if ORYOL_USE_VLD
#include "vld.h"
#endif
In the CMakeLists.txt file of the source file's module (in Oryol's case: the Core module) define a library dependency to vld. Every app which uses the Core module will now also link automatically against VLD. Also, an extra target dependency must be defined to trigger fips-vld's special target vld_copy_dlls (this is explained further down):
# example from Oryol's Core module CMakeLists.txt
fips_begin_module(Core)
...
if (FIPS_USE_VLD)
fips_libs(vld)
endif()
fips_end_module()
if (FIPS_USE_VLD)
add_dependencies(Core vld_copy_dlls)
endif()
That's all for preparations, now build with one of the the fips-vld custom-configs win32-vstudio-vld or win64-vstudio-vld inside Visual Studio:
# 32-bit Windows: set win32 default config and open in Visual Studio:
> fips set config win32-vstdio-vld
> fips open
# 64-bit Windows: likewise
> fips set config win64-vstudio-vld
> fips open
Build and run the application (in debug mode). Now, on application shutdown, VLD should list the memory leaks it found, or if you're lucky you'll see a:
No memory leaks detected.
Visual Leak Detector is now exiting.
The VLD fipsification is a bit unusual:
- the VLD DLLs are precompiled and are located under fips-vld/libs
- the CMakeLists.txt file only defines a custom target called vld_copy_dlls which copies the precompiled DLLs to the fips-deploy directory where the executables are built to
- in order to trigger the copying, a target dependencies must be defined in a CMakeLists.txt file of the application being tested (in Oryol, the Core module sets up this dependency since it is linked into every Oryol application)
The fips custom configs under fips-vld/fips-configs simply set the cmake option FIPS_USE_VLD to ON, the same can be achieved by using one of the default debug configs (e.g. win64-vstudio-debug) and set the FIPS_USE_VLD option to ON in ccmake / cmake-gui (via 'fips config').