Leak Browser is a debugging tool for tracking down hard to find leaks in software.
There are many techniques and tools for finding software resource leaks. Leak Browser was written to find those leaks that other tools could not. It does this by monitoring a vast array of resource allocation routines, from operator new all the way down to ntdll!NtAllocateVirtualMemory.
Unlike other tools Leak Browser does not require recompilation, and does not require that you link to specific libraries. Leak Browser is able to cope with both static and dynamic link C runtime libraries, all you need is the symbol files. Currently it works with compiled Win32 code only, Win64 support is planned, .NET support is a long way off but there are plenty of other tools that can handle .NET because the .NET virtual machine makes this relatively easy compared with native code, JVM support and scripting support are not likely ever.
Unlike other tools it generates a meaningful picture of how your software is leaking. It does this by generating HTML graphs of the leak sites. There are also a number of filters that enable you to produce a more meaningful picture. Some sample output is provided on the example pages.
This list is a list of some of the functions tracked by an older version of Leak Browser .
[The latest version tracks many other functions and additionally tracks uncommitted address space.]
C/C++ runtime
msvcrt.dll!operator new
msvcrt.dll!operator delete
msvcrt.dll!malloc
msvcrt.dll!free
msvcrt.dll!calloc
msvcrt.dll!realloc
msvcrtd.dll!operator new
msvcrtd.dll!operator delete
msvcrtd.dll!malloc
msvcrtd.dll!free
msvcrtd.dll!calloc
msvcrtd.dll!realloc
msvcrtd.dll!_malloc_dbg
msvcrtd.dll!_calloc_dbg
msvcrtd.dll!_realloc_dbg
msvcrtd.dll!_free_dbg
msvcr70.dll!operator new
msvcr70.dll!operator delete
msvcr70.dll!malloc
msvcr70.dll!free
msvcr70.dll!calloc
msvcr70.dll!realloc
msvcr70.dll!_aligned_malloc
msvcr70.dll!_aligned_realloc
msvcr70.dll!_aligned_offset_malloc
msvcr70.dll!_aligned_offset_realloc
msvcr70.dll!_aligned_free
msvcr70d.dll!operator new
msvcr70d.dll!operator delete
msvcr70d.dll!malloc
msvcr70d.dll!free
msvcr70d.dll!calloc
msvcr70d.dll!realloc
msvcr70d.dll!_malloc_dbg
msvcr70d.dll!_calloc_dbg
msvcr70d.dll!_realloc_dbg
msvcr70d.dll!_free_dbg
msvcr70d.dll!_aligned_malloc
msvcr70d.dll!_aligned_realloc
msvcr70d.dll!_aligned_offset_malloc
msvcr70d.dll!_aligned_offset_realloc
msvcr70d.dll!_aligned_free
msvcr70d.dll!_aligned_malloc_dbg
msvcr70d.dll!_aligned_realloc_dbg
msvcr70d.dll!_aligned_offset_malloc_dbg
msvcr70d.dll!_aligned_offset_realloc_dbg
msvcr70d.dll!_aligned_free_dbg
msvcr71.dll!operator new
msvcr71.dll!operator delete
msvcr71.dll!malloc
msvcr71.dll!free
msvcr71.dll!calloc
msvcr71.dll!realloc
msvcr71.dll!_aligned_malloc
msvcr71.dll!_aligned_realloc
msvcr71.dll!_aligned_offset_malloc
msvcr71.dll!_aligned_offset_realloc
msvcr71.dll!_aligned_free
msvcr71d.dll!operator new
msvcr71d.dll!operator delete
msvcr71d.dll!malloc
msvcr71d.dll!free
msvcr71d.dll!calloc
msvcr71d.dll!realloc
msvcr71d.dll!_malloc_dbg
msvcr71d.dll!_calloc_dbg
msvcr71d.dll!_realloc_dbg
msvcr71d.dll!_free_dbg
msvcr71d.dll!_aligned_malloc
msvcr71d.dll!_aligned_realloc
msvcr71d.dll!_aligned_offset_malloc
msvcr71d.dll!_aligned_offset_realloc
msvcr71d.dll!_aligned_free
msvcr71d.dll!_aligned_malloc_dbg
msvcr71d.dll!_aligned_realloc_dbg
msvcr71d.dll!_aligned_offset_malloc_dbg
msvcr71d.dll!_aligned_offset_realloc_dbg
msvcr71d.dll!_aligned_free_dbg
static link _malloc_dbg
static link _calloc_dbg
static link _realloc_dbg
static link _free_dbg
static link _aligned_malloc
static link _aligned_realloc
static link _aligned_offset_malloc
static link _aligned_offset_realloc
static link _aligned_free
static link _aligned_malloc_dbg
static link _aligned_realloc_dbg
static link _aligned_offset_malloc_dbg
static link _aligned_offset_realloc_dbg
static link _aligned_free_dbg
mfc42.dll!@823 operator new (MFC delegates
to C runtime)mfc42u.dll!@823 operator new (MFC delegates
to C runtime)mfc42d.dll!@714 operator new (MFC delegates
to C runtime)mfc42ud.dll!@714 operator new (MFC delegates
to C runtime)mfc70.dll!@703 operator new (MFC delegates
to VC7 runtime)mfc70.dll!@256 operator new[] (MFC delegates
to VC7 runtime)mfc70u.dll!@703 operator new (MFC delegates
to VC7 runtime)mfc70u.dll!@256 operator new[] (MFC delegates
to VC7 runtime)mfc70d.dll!@832 operator new (MFC delegates
to VC7 runtime)mfc70d.dll!@257 operator new[] (MFC delegates
to VC7 runtime)mfc70d.dll!@834 operator new (debug MFC delegates
to VC7 runtime)mfc70d.dll!@259 operator new[] (debug MFC
delegates to VC7 runtime)mfc70ud.dll!@833 operator new (MFC delegates
to VC7 runtime)mfc70ud.dll!@258 operator new[] (MFC delegates
to VC7 runtime)mfc70ud.dll!@835 operator new (debug MFC
delegates to VC7 runtime)mfc70ud.dll!@260 operator new[] (debug MFC
delegates to VC7 runtime)Win32 handles
kernel32.dll!DuplicateHandle
kernel32.dll!CloseHandle
kernel32.dll!CreateFileA
kernel32.dll!CreateFileW
kernel32.dll!CreateEventA
kernel32.dll!CreateEventW
kernel32.dll!OpenEventA
kernel32.dll!OpenEventW
kernel32.dll!CreateSemaphoreA
kernel32.dll!CreateSemaphoreW
kernel32.dll!OpenSemaphoreA
kernel32.dll!OpenSemaphoreW
kernel32.dll!CreateThread
kernel32.dll!CreateRemoteThread
kernel32.dll!OpenThread Windows 2000 and
abovekernel32.dll!CreateProcessA
kernel32.dll!CreateProcessW
kernel32.dll!OpenProcess
advapi32.dll!CreateProcessAsUserA
advapi32.dll!CreateProcessAsUserW
advapi32.dll!CreateProcessWithLogonW Windows
2000 and aboveadvapi32.dll!LogonUserA
advapi32.dll!LogonUserW
kernel32.dll!CreateMailslotA
kernel32.dll!CreateMailslotW
kernel32.dll!CreateWaitableTimerA
kernel32.dll!CreateWaitableTimerW
kernel32.dll!OpenWaitableTimerA
kernel32.dll!OpenWaitableTimerW
kernel32.dll!CreateMutexA
kernel32.dll!CreateMutexW
kernel32.dll!OpenMutexA
kernel32.dll!OpenMutexW
kernel32.dll!CreateNamedPipeW
kernel32.dll!CreateNamedPipeA
kernel32.dll!CreatePipe
kernel32.dll!CreateFileMappingA
kernel32.dll!CreateFileMappingW
kernel32.dll!OpenFileMappingA
kernel32.dll!OpenFileMappingW
kernel32.dll!CreateIoCompletionPort
user32.dll!CreateWindowStationA
user32.dll!CreateWindowStationW
user32.dll!CloseWindowStation
ws2_32.dll!socket
ws2_32.dll!closesocket
kernel32.dll!HeapCreate
kernel32.dll!HeapDestroy
kernel32.dll!FindFirstFileA
kernel32.dll!FindFirstFileW
kernel32.dll!FindFirstFileExA
kernel32.dll!FindFirstFileExW
kernel32.dll!FindClose
Advapi32.dll!OpenEventLogA
Advapi32.dll!OpenEventLogW
Advapi32.dll!OpenBackupEventLogA
Advapi32.dll!OpenBackupEventLogW
Advapi32.dll!CloseEventLog
Advapi32.dll!OpenSCManagerA
Advapi32.dll!OpenSCManagerW
Advapi32.dll!OpenServiceA
Advapi32.dll!OpenServiceW
Advapi32.dll!CreateServiceA
Advapi32.dll!CreateServiceW
Advapi32.dll!CloseServiceHandle
Advapi32.dll!RegCreateKeyA
Advapi32.dll!RegCreateKeyW
Advapi32.dll!RegCreateKeyExA
Advapi32.dll!RegCreateKeyExW
Advapi32.dll!RegOpenKeyA
Advapi32.dll!RegOpenKeyW
Advapi32.dll!RegOpenKeyExA
Advapi32.dll!RegOpenKeyExW
Advapi32.dll!RegConnectRegistryA
Advapi32.dll!RegConnectRegistryW
Advapi32.dll!RegOpenCurrentUser Windows 2000
and aboveAdvapi32.dll!RegOpenUserClassesRoot Windows
2000 and aboveAdvapi32.dll!RegCloseKey
Win32 allocskernel32.dll!GlobalAlloc
kernel32.dll!GlobalReAlloc
kernel32.dll!GlobalFree
kernel32.dll!LocalAlloc
kernel32.dll!LocalReAlloc
kernel32.dll!LocalFree
kernel32.dll!VirtualAlloc
kernel32.dll!VirtualAllocEx
kernel32.dll!VirtualFree
kernel32.dll!VirtualFreeEx
kernel32.dll!HeapAlloc same as NTDLL!RtlAllocateHeap
kernel32.dll!HeapReAlloc same as NTDLL!RtlReAllocateHeap
kernel32.dll!HeapFree same as NTDLL!RtlFreeHeap
advapi32.dll!CreatePrivateObjectSecurity
advapi32.dll!DestroyPrivateObjectSecurity
COM strings
oleaut32.dll!SysAllocString
oleaut32.dll!SysAllocStringByteLen
oleaut32.dll!SysAllocStringLen
oleaut32.dll!SysReAllocString
oleaut32.dll!SysReAllocStringLen
oleaut32.dll!SysFreeString
COM memory – CoTaskMem
ole32.dll!CoTaskMemAlloc
ole32.dll!CoTaskMemRealloc
ole32.dll!CoTaskMemFree
COM arrays – SafeArray
oleaut32.dll!SafeArrayCreate
oleaut32.dll!SafeArrayCreateEx
oleaut32.dll!SafeArrayCreateVector
oleaut32.dll!SafeArrayCreateVectorEx
oleaut32.dll!SafeArrayCopy
oleaut32.dll!SafeArrayDestroy
oleaut32.dll!SafeArrayAllocDescriptor
oleaut32.dll!SafeArrayAllocDescriptorEx
oleaut32.dll!SafeArrayDestroyDescriptor
oleaut32.dll!SafeArrayAllocData
oleaut32.dll!SafeArrayDestroyData
oleaut32.dll!SafeArrayRedim
GDI resources
user32.dll!LoadBitmapA
user32.dll!LoadBitmapW
gdi32.dll!CreateBitmap
gdi32.dll!CreateBitmapIndirect
gdi32.dll!CreateCompatibleBitmap
gdi32.dll!CreateDiscardableBitmap
gdi32.dll!CreateDIBitmap
gdi32.dll!CreateDIBSection
gdi32.dll!CreateBrushIndirect
gdi32.dll!CreateSolidBrush
gdi32.dll!CreatePatternBrush
gdi32.dll!CreateDIBPatternBrush
gdi32.dll!CreateDIBPatternBrushPt
gdi32.dll!CreateHatchBrush
gdi32.dll!CreateCompatibleDC
gdi32.dll!CreateDCA
gdi32.dll!CreateDCW
gdi32.dll!CreateICA
gdi32.dll!CreateICW
user32.dll!GetDC
user32.dll!GetDCEx
user32.dll!GetWindowDC
gdi32.dll!CreateFontA
gdi32.dll!CreateFontW
gdi32.dll!CreateFontIndirectA
gdi32.dll!CreateFontIndirectW
gdi32.dll!CreateMetaFileA
gdi32.dll!CreateMetaFileW
gdi32.dll!CreateEnhMetaFileA
gdi32.dll!CreateEnhMetaFileW
gdi32.dll!GetEnhMetaFileA
gdi32.dll!GetEnhMetaFileW
gdi32.dll!CreatePen
gdi32.dll!CreatePenIndirect
gdi32.dll!ExtCreatePen
gdi32.dll!PathToRegion
gdi32.dll!CreateEllipticRgn
gdi32.dll!CreateEllipticRgnIndirect
gdi32.dll!CreatePolygonRgn
gdi32.dll!CreatePolyPolygonRgn
gdi32.dll!CreateRectRgn
gdi32.dll!CreateRectRgnIndirect
gdi32.dll!CreateRoundRectRgn
gdi32.dll!ExtCreateRegion
gdi32.dll!CreateHalftonePalette
gdi32.dll!CreatePalette
gdi32.dll!DeleteObject
gdi32.dll!DeleteDC
gdi32.dll!DeleteMetaFile
gdi32.dll!DeleteEnhMetaFile
gdi32.dll!CloseMetaFile
gdi32.dll!CloseEnhMetaFile
user32.dll!ReleaseDC
User32 resources
user32.dll!CreateWindowExW includes CreateWindow
macrouser32.dll!CreateWindowExA includes CreateWindow
macrouser32.dll!CreateMDIWindowA
user32.dll!CreateMDIWindowW
user32.dll!CreateDialogParamA includes CreateDialog
macrouser32.dll!CreateDialogParamW includes CreateDialog
macrouser32.dll!CreateDialogIndirectParamA includes
CreateDialogIndirect macrouser32.dll!CreateDialogIndirectParamW includes
CreateDialogIndirect macrouser32.dll!DestroyWindow
user32.dll!CreateCursor
user32.dll!DestroyCursor
user32.dll!SetTimer
user32.dll!KillTimer
System resources
ntdll.dll!NtCreateKey
ntdll.dll!NtOpenKey
ntdll.dll!NtClose
ntdll.dll!NtCreateFile
ntdll.dll!NtOpenFile
ntdll.dll!NtCreateDirectoryObject
ntdll.dll!NtOpenDirectoryObject
ntdll.dll!NtDuplicateObject
ntdll.dll!NtCreateToken
ntdll.dll!NtDuplicateToken
ntdll.dll!NtOpenProcessToken
ntdll.dll!NtOpenThreadToken
ntdll.dll!NtConnectPort
ntdll.dll!NtCreateMutant
ntdll.dll!NtCreateNamedPipeFile
ntdll.dll!NtCreatePort
ntdll.dll!NtCreateProcess
ntdll.dll!NtCreateSection
ntdll.dll!NtCreateSemaphore
ntdll.dll!NtCreateSymbolicLinkObject
ntdll.dll!NtCreateTimer
ntdll.dll!NtOpenEventPair
ntdll.dll!NtOpenIoCompletion
ntdll.dll!NtOpenProcess
ntdll.dll!NtOpenSection
ntdll.dll!NtOpenSemaphore
ntdll.dll!NtOpenTimer
ntdll.dll!NtCreateThread
ntdll.dll!NtOpenEvent
ntdll.dll!NtOpenMutant
ntdll.dll!NtOpenSymbolicLinkObject
ntdll.dll!NtOpenThread
ntdll.dll!NtFilterToken Windows 2000 and
aboventdll.dll!NtCreateJobObject Windows 2000
and aboventdll.dll!NtOpenJobObject Windows 2000 and
aboventdll.dll!NtCreateWaitablePort Windows 2000
and aboventdll.dll!NtSecureConnectPort Windows 2000
and aboventdll.dll!NtAcceptConnectPort
ntdll.dll!NtCreateEvent
ntdll.dll!NtCreateEventPair
ntdll.dll!NtCreateIoCompletion
ntdll.dll!NtCreateMailslotFile
ntdll.dll!NtCreateProfile
System memory
ntdll.dll!NtAllocateVirtualMemory
ntdll.dll!NtFreeVirtualMemory