Added support for the Visual Leak Detector. This effects "Debug" builds only.
This commit is contained in:
parent
29a59ce47e
commit
7016383fbb
@ -75,7 +75,7 @@
|
||||
</CustomBuildStep>
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CONFIG_NAME=$(ConfigurationName);WIN32;_DEBUG;_CONSOLE;QT_LARGEFILE_SUPPORT;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;QT_DLL;QT_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
@ -89,7 +89,7 @@
|
||||
<Link>
|
||||
<AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalDependencies>qtmaind.lib;QtCored4.lib;QtGuid4.lib;Winmm.lib;Shlwapi.lib;Wininet.lib;PowrProf.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins\imageformats;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins\imageformats;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\lib\Win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
@ -97,8 +97,10 @@
|
||||
<PostBuildEvent>
|
||||
<Message>Copy plugin DLL%27s</Message>
|
||||
<Command>mkdir "$(TargetDir)imageformats"
|
||||
copy "$(QTDIR)\plugins\imageformats\q???d4.dll" "$(TargetDir)imageformats\"
|
||||
copy "$(QTDIR)\plugins\imageformats\q????d4.dll" "$(TargetDir)imageformats\"
|
||||
copy /Y "$(QTDIR)\plugins\imageformats\q???d4.dll" "$(TargetDir)imageformats\"
|
||||
copy /Y "$(QTDIR)\plugins\imageformats\q????d4.dll" "$(TargetDir)imageformats\"
|
||||
copy /Y "$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\bin\Win32\*.dll" "$(TargetDir)"
|
||||
copy /Y "$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\bin\Win32\*.manifest" "$(TargetDir)"
|
||||
</Command>
|
||||
</PostBuildEvent>
|
||||
<ResourceCompile>
|
||||
@ -121,7 +123,7 @@ copy "$(QTDIR)\plugins\imageformats\q????d4.dll" "$(TargetDir)imageformats\"
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<AdditionalIncludeDirectories>$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CONFIG_NAME=$(ConfigurationName);WIN32;NDEBUG;_CONSOLE;QT_LARGEFILE_SUPPORT;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;QT_DLL;QT_NO_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||
@ -145,7 +147,6 @@ copy "$(QTDIR)\plugins\imageformats\q????d4.dll" "$(TargetDir)imageformats\"
|
||||
<ShowProgress>LinkVerboseLib</ShowProgress>
|
||||
<Version>
|
||||
</Version>
|
||||
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins\imageformats;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<AssemblyDebug>
|
||||
</AssemblyDebug>
|
||||
@ -164,12 +165,13 @@ copy "$(QTDIR)\plugins\imageformats\q????d4.dll" "$(TargetDir)imageformats\"
|
||||
<TreatLinkerWarningAsErrors>true</TreatLinkerWarningAsErrors>
|
||||
<CreateHotPatchableImage>
|
||||
</CreateHotPatchableImage>
|
||||
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins\imageformats;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\lib\Win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
<PostBuildEvent>
|
||||
<Message>Copy plugin DLL%27s</Message>
|
||||
<Command>mkdir "$(TargetDir)imageformats"
|
||||
copy "$(QTDIR)\plugins\imageformats\q???4.dll" "$(TargetDir)imageformats\"
|
||||
copy "$(QTDIR)\plugins\imageformats\q????4.dll" "$(TargetDir)imageformats\"
|
||||
copy /Y "$(QTDIR)\plugins\imageformats\q???4.dll" "$(TargetDir)imageformats\"
|
||||
copy /Y "$(QTDIR)\plugins\imageformats\q????4.dll" "$(TargetDir)imageformats\"
|
||||
del "$(TargetDir)imageformats\q???d4.dll"
|
||||
</Command>
|
||||
</PostBuildEvent>
|
||||
@ -193,7 +195,7 @@ del "$(TargetDir)imageformats\q???d4.dll"
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<AdditionalIncludeDirectories>$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_CONFIG_NAME=$(ConfigurationName);WIN32;NDEBUG;_CONSOLE;QT_LARGEFILE_SUPPORT;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;QT_NO_DEBUG;QT_NODLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||
@ -215,7 +217,7 @@ del "$(TargetDir)imageformats\q???d4.dll"
|
||||
<AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalDependencies>qtmain.lib;QtCore.lib;QtGui.lib;QtSvg.lib;qsvg.lib;qico.lib;Winmm.lib;imm32.lib;ws2_32.lib;Shlwapi.lib;Wininet.lib;PowrProf.lib;EncodePointer.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ShowProgress>LinkVerboseLib</ShowProgress>
|
||||
<AdditionalLibraryDirectories>$(SolutionDir)\etc\Prerequisites\qt4_static\lib;$(SolutionDir)\etc\Prerequisites\qt4_static\plugins\imageformats;$(SolutionDir)\etc\Prerequisites\EncodePointer\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalLibraryDirectories>$(SolutionDir)\etc\Prerequisites\qt4_static\lib;$(SolutionDir)\etc\Prerequisites\qt4_static\plugins\imageformats;$(SolutionDir)\etc\Prerequisites\EncodePointer\lib;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\lib\Win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<AssemblyDebug>
|
||||
|
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<!-- $Id -->
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||
<noInheritable />
|
||||
<assemblyIdentity type="win32" name="Microsoft.DTfW.DHL" version="6.11.1.404" processorArchitecture="x86" />
|
||||
<file name="dbghelp.dll" />
|
||||
</assembly>
|
BIN
etc/Prerequisites/VisualLeakDetector/bin/Win32/dbghelp.dll
Normal file
BIN
etc/Prerequisites/VisualLeakDetector/bin/Win32/dbghelp.dll
Normal file
Binary file not shown.
BIN
etc/Prerequisites/VisualLeakDetector/bin/Win32/vld_x86.dll
Normal file
BIN
etc/Prerequisites/VisualLeakDetector/bin/Win32/vld_x86.dll
Normal file
Binary file not shown.
307
etc/Prerequisites/VisualLeakDetector/include/vld.h
Normal file
307
etc/Prerequisites/VisualLeakDetector/include/vld.h
Normal file
@ -0,0 +1,307 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Visual Leak Detector - Import Library Header
|
||||
// Copyright (c) 2005-2012 VLD Team
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
// See COPYING.txt for the full terms of the GNU Lesser General Public License.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "vld_def.h"
|
||||
|
||||
#if defined _DEBUG || defined VLD_FORCE_ENABLE
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#pragma comment(lib, "vld.lib")
|
||||
|
||||
// Force a symbolic reference to the global VisualLeakDetector class object from
|
||||
// the DLL. This ensures that the DLL is loaded and linked with the program,
|
||||
// even if no code otherwise imports any of the DLL's exports.
|
||||
#pragma comment(linker, "/include:__imp_?g_vld@@3VVisualLeakDetector@@A")
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Visual Leak Detector APIs
|
||||
//
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
// VLDDisable - Disables Visual Leak Detector's memory leak detection at
|
||||
// runtime. If memory leak detection is already disabled, then calling this
|
||||
// function has no effect.
|
||||
//
|
||||
// Note: In multithreaded programs, this function operates on a per-thread
|
||||
// basis. In other words, if you call this function from one thread, then
|
||||
// memory leak detection is only disabled for that thread. If memory leak
|
||||
// detection is enabled for other threads, then it will remain enabled for
|
||||
// those other threads. It was designed to work this way to insulate you,
|
||||
// the programmer, from having to ensure thread synchronization when calling
|
||||
// VLDEnable() and VLDDisable(). Without this, calling these two functions
|
||||
// unsynchronized could result in unpredictable and unintended behavior.
|
||||
// But this also means that if you want to disable memory leak detection
|
||||
// process-wide, then you need to call this function from every thread in
|
||||
// the process.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllimport) void VLDDisable ();
|
||||
|
||||
// VLDEnable - Enables Visual Leak Detector's memory leak detection at runtime.
|
||||
// If memory leak detection is already enabled, which it is by default, then
|
||||
// calling this function has no effect.
|
||||
//
|
||||
// Note: In multithreaded programs, this function operates on a per-thread
|
||||
// basis. In other words, if you call this function from one thread, then
|
||||
// memory leak detection is only enabled for that thread. If memory leak
|
||||
// detection is disabled for other threads, then it will remain disabled for
|
||||
// those other threads. It was designed to work this way to insulate you,
|
||||
// the programmer, from having to ensure thread synchronization when calling
|
||||
// VLDEnable() and VLDDisable(). Without this, calling these two functions
|
||||
// unsynchronized could result in unpredictable and unintended behavior.
|
||||
// But this also means that if you want to enable memory leak detection
|
||||
// process-wide, then you need to call this function from every thread in
|
||||
// the process.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllimport) void VLDEnable ();
|
||||
|
||||
// VLDRestore - Restore Visual Leak Detector's previous state.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllimport) void VLDRestore ();
|
||||
|
||||
// VLDGlobalDisable - Disables Visual Leak Detector's memory leak detection at
|
||||
// runtime in all threads. If memory leak detection is already disabled,
|
||||
// then calling this function has no effect.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllimport) void VLDGlobalDisable ();
|
||||
|
||||
// VLDGlobalEnable - Enables Visual Leak Detector's memory leak detection
|
||||
// at runtime in all threads. If memory leak detection is already enabled,
|
||||
// which it is by default, then calling this function has no effect.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllimport) void VLDGlobalEnable ();
|
||||
|
||||
// VLDReportLeaks - Report leaks up to the execution point.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllimport) UINT VLDReportLeaks ();
|
||||
|
||||
// VLDGetLeaksCount - Return memory leaks count to the execution point.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllimport) UINT VLDGetLeaksCount ();
|
||||
|
||||
// VLDMarkAllLeaksAsReported - Mark all leaks as reported.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllimport) void VLDMarkAllLeaksAsReported ();
|
||||
|
||||
|
||||
// VLDRefreshModules - Look for recently loaded DLLs and patch them if necessary.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllimport) void VLDRefreshModules();
|
||||
|
||||
|
||||
// VLDEnableModule - Enable Memory leak checking on the specified module.
|
||||
//
|
||||
// module: module handle.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
|
||||
__declspec(dllimport) void VLDEnableModule(HMODULE module);
|
||||
|
||||
|
||||
// VLDDisableModule - Disable Memory leak checking on the specified module.
|
||||
//
|
||||
// module: module handle.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllimport) void VLDDisableModule(HMODULE module);
|
||||
|
||||
// VLDGetOptions - Return all current options.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// Mask of current options.
|
||||
//
|
||||
__declspec(dllimport) UINT VLDGetOptions();
|
||||
|
||||
// VLDGetReportFilename - Return current report filename.
|
||||
//
|
||||
// filename: current report filename (max characters - MAX_PATH).
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllimport) void VLDGetReportFilename(WCHAR *filename);
|
||||
|
||||
// VLDSetOptions - Update the report options via function call rather than INI file.
|
||||
//
|
||||
// option_mask: Only the following flags are checked
|
||||
// VLD_OPT_AGGREGATE_DUPLICATES
|
||||
// VLD_OPT_MODULE_LIST_INCLUDE
|
||||
// VLD_OPT_SAFE_STACK_WALK
|
||||
// VLD_OPT_SLOW_DEBUGGER_DUMP
|
||||
// VLD_OPT_TRACE_INTERNAL_FRAMES
|
||||
// VLD_OPT_START_DISABLED
|
||||
// VLD_OPT_SKIP_HEAPFREE_LEAKS
|
||||
// VLD_OPT_VALIDATE_HEAPFREE
|
||||
//
|
||||
// maxDataDump: maximum number of user-data bytes to dump for each leaked block.
|
||||
//
|
||||
// maxTraceFrames: maximum number of frames per stack trace for each leaked block.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllimport) void VLDSetOptions(UINT option_mask, SIZE_T maxDataDump, UINT maxTraceFrames);
|
||||
|
||||
// VLDSetModulesList - Set list of modules included/excluded in leak detection
|
||||
// depending on parameter "includeModules".
|
||||
//
|
||||
// modules: list of modules to be forcefully included/excluded in leak detection.
|
||||
//
|
||||
// includeModules: include or exclude that modules.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllimport) void VLDSetModulesList(CONST WCHAR *modules, BOOL includeModules);
|
||||
|
||||
// VLDGetModulesList - Return current list of included/excluded modules
|
||||
// depending on flag VLD_OPT_TRACE_INTERNAL_FRAMES.
|
||||
//
|
||||
// modules: destination string for list of included/excluded modules (maximum length 512 characters).
|
||||
//
|
||||
// size: maximum string size.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// BOOL: TRUE if include modules, otherwise FALSE.
|
||||
//
|
||||
__declspec(dllimport) BOOL VLDGetModulesList(WCHAR *modules, UINT size);
|
||||
|
||||
// VLDSetReportOptions - Update the report options via function call rather than INI file.
|
||||
//
|
||||
// Only the following flags are checked
|
||||
// VLD_OPT_REPORT_TO_DEBUGGER
|
||||
// VLD_OPT_REPORT_TO_FILE
|
||||
// VLD_OPT_REPORT_TO_STDOUT
|
||||
// VLD_OPT_UNICODE_REPORT
|
||||
//
|
||||
// filename is optional and can be NULL.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllimport) void VLDSetReportOptions(UINT option_mask, CONST WCHAR *filename);
|
||||
|
||||
// VLDSetReportHook - Installs or uninstalls a client-defined reporting function by hooking it
|
||||
// into the C run-time debug reporting process (debug version only).
|
||||
//
|
||||
// mode: The action to take: VLD_RPTHOOK_INSTALL or VLD_RPTHOOK_REMOVE.
|
||||
//
|
||||
// pfnNewHook: Report hook to install or remove.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// int: 0 if success.
|
||||
//
|
||||
__declspec(dllimport) int VLDSetReportHook(int mode, VLD_REPORT_HOOK pfnNewHook);
|
||||
|
||||
// VLDResolveCallstacks - Performs symbol resolution for all saved extent CallStack's that have
|
||||
// been tracked by Visual Leak Detector. This function is necessary for applications that
|
||||
// dynamically load and unload modules, and through which memory leaks might be included.
|
||||
// If this is NOT called, stack traces may have stack frames with no symbol information. This
|
||||
// happens because the symbol API's cannot look up symbols for a binary / module that has been unloaded
|
||||
// from the process.
|
||||
//
|
||||
// Return Value:
|
||||
//
|
||||
// None.
|
||||
//
|
||||
__declspec(dllexport) void VLDResolveCallstacks();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
||||
#else // !_DEBUG
|
||||
|
||||
#define VLDEnable()
|
||||
#define VLDDisable()
|
||||
#define VLDRestore()
|
||||
#define VLDReportLeaks() 0
|
||||
#define VLDGetLeaksCount() 0
|
||||
#define VLDMarkAllLeaksAsReported()
|
||||
#define VLDRefreshModules()
|
||||
#define VLDEnableModule(a)
|
||||
#define VLDDisableModule(b)
|
||||
#define VLDGetOptions() 0
|
||||
#define VLDGetReportFilename(a)
|
||||
#define VLDSetOptions(a, b, c)
|
||||
#define VLDSetReportHook(a, b)
|
||||
#define VLDSetModulesList(a)
|
||||
#define VLDGetModulesList(a, b) FALSE
|
||||
#define VLDSetReportOptions(a, b)
|
||||
|
||||
#endif // _DEBUG
|
45
etc/Prerequisites/VisualLeakDetector/include/vld_def.h
Normal file
45
etc/Prerequisites/VisualLeakDetector/include/vld_def.h
Normal file
@ -0,0 +1,45 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Visual Leak Detector - Import Library Header
|
||||
// Copyright (c) 2005-2012 VLD Team
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 2.1 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
//
|
||||
// See COPYING.txt for the full terms of the GNU Lesser General Public License.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#pragma once
|
||||
|
||||
#define VLD_OPT_AGGREGATE_DUPLICATES 0x0001 // If set, aggregate duplicate leaks in the leak report.
|
||||
#define VLD_OPT_MODULE_LIST_INCLUDE 0x0002 // If set, modules in the module list are included, all others are excluded.
|
||||
#define VLD_OPT_REPORT_TO_DEBUGGER 0x0004 // If set, the memory leak report is sent to the debugger.
|
||||
#define VLD_OPT_REPORT_TO_FILE 0x0008 // If set, the memory leak report is sent to a file.
|
||||
#define VLD_OPT_SAFE_STACK_WALK 0x0010 // If set, the stack is walked using the "safe" method (StackWalk64).
|
||||
#define VLD_OPT_SELF_TEST 0x0020 // If set, perform a self-test to verify memory leak self-checking.
|
||||
#define VLD_OPT_SLOW_DEBUGGER_DUMP 0x0040 // If set, inserts a slight delay between sending output to the debugger.
|
||||
#define VLD_OPT_START_DISABLED 0x0080 // If set, memory leak detection will initially disabled.
|
||||
#define VLD_OPT_TRACE_INTERNAL_FRAMES 0x0100 // If set, include useless frames (e.g. internal to VLD) in call stacks.
|
||||
#define VLD_OPT_UNICODE_REPORT 0x0200 // If set, the leak report will be encoded UTF-16 instead of ASCII.
|
||||
#define VLD_OPT_VLDOFF 0x0400 // If set, VLD will be completely deactivated. It will not attach to any modules.
|
||||
#define VLD_OPT_REPORT_TO_STDOUT 0x0800 // If set, the memory leak report is sent to stdout.
|
||||
#define VLD_OPT_SKIP_HEAPFREE_LEAKS 0x1000 // If set, VLD skip HeapFree memory leaks.
|
||||
#define VLD_OPT_VALIDATE_HEAPFREE 0x2000 // If set, VLD verifies and reports heap consistency for HeapFree calls.
|
||||
#define VLD_OPT_RELEASE_CRT_RUNTIME 0x4000 // If set, VLD treat CRT runtime as release version (use only with define VLD_FORCE_ENABLE).
|
||||
|
||||
#define VLD_RPTHOOK_INSTALL 0
|
||||
#define VLD_RPTHOOK_REMOVE 1
|
||||
|
||||
typedef int (__cdecl * VLD_REPORT_HOOK)(int reportType, wchar_t *message, int *returnValue);
|
BIN
etc/Prerequisites/VisualLeakDetector/lib/Win32/vld.lib
Normal file
BIN
etc/Prerequisites/VisualLeakDetector/lib/Win32/vld.lib
Normal file
Binary file not shown.
BIN
etc/Prerequisites/VisualLeakDetector/lib/Win64/vld.lib
Normal file
BIN
etc/Prerequisites/VisualLeakDetector/lib/Win64/vld.lib
Normal file
Binary file not shown.
@ -30,7 +30,7 @@
|
||||
#define VER_LAMEXP_MINOR_LO 4
|
||||
#define VER_LAMEXP_TYPE Beta
|
||||
#define VER_LAMEXP_PATCH 13
|
||||
#define VER_LAMEXP_BUILD 956
|
||||
#define VER_LAMEXP_BUILD 957
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Tool versions (minimum expected versions!)
|
||||
|
21
src/Global.h
21
src/Global.h
@ -33,6 +33,9 @@
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <Windows.h>
|
||||
|
||||
//Visual Leaks Detector
|
||||
#include <vld.h>
|
||||
|
||||
//Declarations
|
||||
class QString;
|
||||
class QStringList;
|
||||
@ -178,17 +181,25 @@ SIZE_T lamexp_dbg_private_bytes(void);
|
||||
|
||||
//Memory check
|
||||
#if defined(_DEBUG)
|
||||
#define LAMEXP_MEMORY_CHECK(CMD) \
|
||||
#define LAMEXP_MEMORY_CHECK(FUNC, RETV, ...) \
|
||||
{ \
|
||||
SIZE_T _privateBytesBefore = lamexp_dbg_private_bytes(); \
|
||||
CMD; \
|
||||
RETV = FUNC(__VA_ARGS__); \
|
||||
SIZE_T _privateBytesLeak = (lamexp_dbg_private_bytes() - _privateBytesBefore) / 1024; \
|
||||
if(_privateBytesLeak > 10) { \
|
||||
qWarning("Memory leak: Lost %u KiloBytes.", _privateBytesLeak); \
|
||||
if(_privateBytesLeak > 0) { \
|
||||
char _buffer[128]; \
|
||||
qWarning("LameXP Memory Leak: Lost %u KiloBytes.", _privateBytesLeak); \
|
||||
_snprintf_s(_buffer, 128, _TRUNCATE, "Memory leak: Lost %u KiloBytes.\n", _privateBytesLeak); \
|
||||
OutputDebugStringA("----------\n"); \
|
||||
OutputDebugStringA(_buffer); \
|
||||
OutputDebugStringA("----------\n"); \
|
||||
} \
|
||||
}
|
||||
#else
|
||||
#define LAMEXP_MEMORY_CHECK(CMD) CMD
|
||||
#define LAMEXP_MEMORY_CHECK(FUNC, RETV, ...) \
|
||||
{ \
|
||||
RETV = FUNC(__VA_ARGS__); \
|
||||
}
|
||||
#endif
|
||||
|
||||
//Check for CPU-compatibility options
|
||||
|
@ -205,7 +205,7 @@ static int _main(int argc, char* argv[])
|
||||
{
|
||||
int iResult = -1;
|
||||
qInstallMsgHandler(lamexp_message_handler);
|
||||
LAMEXP_MEMORY_CHECK(iResult = lamexp_main(argc, argv));
|
||||
LAMEXP_MEMORY_CHECK(lamexp_main, iResult, argc, argv);
|
||||
lamexp_finalization();
|
||||
return iResult;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user