/fips-vld

Fipsified VLD (Visual Leak Detector)

Primary LanguageC

fips-vld

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).

How to use:

First make sure to update fips itself (the feature to detect custom build configs in imported project is new)!

Importing into your fips project:

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:

Integrating VLD into your project:

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.

How it works:

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').