Logo
MemPro MemPro


MemPro x86 version: 1.2.4.0 Download Now (x86)
version: 1.2.3.0
version: 1.1.10.0
version: 1.1.9.0
MemPro x64 version: 1.2.4.0 Download Now (x64)
version: 1.2.3.0
version: 1.1.10.0
version: 1.1.9.0


The free trial version of MemPro lasts 2 days, after that you will need to purchase a license key to continue using MemPro.

Please see the FAQ for commonly asked questions/issues with MemPro




Overview

MemPro is a Windows app that can profile C++ apps on any* platform

MemPro is a C++ memory profiler. MemPro shows you a breakdown of all allocations in your application. MemPro can be used to find out what is using the most memory, and can help with tracking down memory leaks and memory corruptions. MemPro also has views on the entire virtual memory, showing reserved, committed and allocated memory.

To use MemPro you need to link your application to the MemProLib library and insert the alloc and free tracking functions into your allocator. MemPro is a separate Windows application that connects to your app via MemProLib using a TCP connection. MemPro records every allocation and free, and generates stats on the memory allocated. You can then analyse this data in various ways.

For instructions on how to use MemPro please view the ReadMe.txt supplied in the download.

* C++ compiler must be able to produce pdb or symbol txt files



Features

Realtime Graph

The realtime graph view shows committed and reserved memory over time. This is useful for spotting trends, such as leaks and fragmentation. It can also export to .csv files for further analysis in Excel.

MemPro graph

Callstack Tree

This is your standard tree view showing where memory is allocated. It shows inclusive and exclusive allocations per callstack, and allows sorting by column and expanding/collapsing callstacks. This is the most useful view for tracking down where the memory is going in your application.

callstacks view

Leaks

It's possible to subtract one snapshot from another, and then use any of the views to analyse it. This is great for tracking down memory leaks.

Butterfly View

This is the standard butterfly view of allocations. View the top functions that allocate memory, what those functions call, and what calls those functions. This is useful for singling out specific areas of the code that are allocating too much.

butterfly view

Page View

This view shows all pages available to the process. It can show all free pages, reserved pages and committed pages. You can view the entire address space, and zoom down to a page level and inspect the allocations in a page. This view is invaluable for detecting both virtual address space fragmentation and page fragmentation. It is also useful for getting a handle on how your memory is laid out.

virtual mem

History View

This is a rather special view that's incredibly useful for tracking down memory corruptions (or scribblers). Give it the range of memory that you're interested in and it will collect the history of every allocation and free that happened in that range. You can then scroll through time and find the likely culprit that's causing the corruption.

history

Allocation Type View

This breaks down the allocations by type. This is a new and slightly experimental view. To get the type information it looks up the allocation file and line number and parses the text. This view will only work if it has access to the matching source code that built the exe. The parser is very simple, it will look at the line of code and try and find the new keyword and then a type name. For example these types will be picked up:
p = new Class()
p = new Class[10]
Limitations of this system are that it won't work if you allocate using macros, it doesn't cope well with templates, and it ignores namespace scope. However, it can still be useful at times.

Allocation types




Feedback

If you find bugs or would like to request a feature please let me know.
To keep informed about updates you can subscribe to my newsletter here.












Versions

04/02/20141.2.4.0
-Fixed bug in Leak View where it would sometimes report negative values and false positives
-Improved Leak View GUI layout

04/02/20141.2.3.0
-linking MemProLib as a dll (MemProDll.dll) for profiling apps with multiple dlls
-significantly reduced MemPro Memory usage for long profiles
-fixed MemPro registration when behind proxy web server
-fixed crash bug is Windows text scaling is applied
-moved MemProLib source files to src directory
-made installer remember install paths
-fixed connection bugs (connect and disconnect very quickly)
-improved MemProLib connection error reporting
-improved registration process
-fixed 'two snapshots bug' when disconnecting
-fixed softlock if can't copy mempro_dump file
-fixed bug taking historic snapshots. It would sometimes get the wrong results
-fixed memory going missing if callstack couldn't be generated
-added support to MemProLib for overriding new/delete on OSX
-allow multiple instances of MemPro to be run at once
-added progress bar for connection
-MemPro sample working on Linux and OSX
-MemProLib fixes for Linux and OSX
-fixed problems with disconnecting and then re-connecting to the same app
-improved crash reporting

18/11/20131.1.10.0
-Bug fixes
-Fixed crash in source code view
-fixed reading of alloc file. Fixes rewind memory view
-sample app now compiles on Unix
-fixed rewind address text box sizes
-overriding of malloc/free in MemProLib

18/11/20131.1.9.0
-New Installer
-Pre-built MemProLib libraries for all platforms
-Renamed installed directories: MemProLib => src, MemProCpp => combined_src
-Installer adds paths to INCLUDE and LIB environment variables
-Fixed potential crash in CallTreeView
-Help chm now contains FAQ
-Updated Setup help page
-Fixed installing on XP
-Installer now gives option to install source code to a different directory
-Unix and OSX projects for MemProLib

17/10/20131.1.8.0
-Support for profiling applications on Unix based systems and GCC

20/08/20131.1.7.0
-Improved MemProLib shutdown so that it won't miss global state teardown frees (this would occasionally happen if the socket had not flushed its state in time)
-made time and graph update every second rather than waiting until allocations arrive
-save and restore MemPro main window size and position on startup
-Launch dialog automatically strips quotes from exe string

17/08/20131.1.6.0
-Improvements to Leak View
-collapse/expand leak callstacks
-improved the way that suspect leaks are evaluated using graph gradient.
-re-organised and improved GUI
-clear distinction between unreferenced allocations and suspect leaks
-fixed memory value units updating
-removed callstack limit for leak stats
-callstack graph limit now changeable in settings, and default to 500 instead of 25.
-removed gradient checkbox because it doesn't make sense to have it disabled
-Leak View now shows all allocations that are still alive after app exit as leaks
-units setting now saved between runs
-updated Leak View help page and chm
-fixed exclusion filter. Deleting filter had no effect.
-Double clicking on callstack opens file
-Bug fix: Leak View would show incorrect results when re-connecting and creating a new session.

25/06/20131.1.5.0
-Fixed potential compile error including winsock2.h
-Added feedback form
-Changed free trial to be 2 days
-
-Minor modification made on 08/07/2013 (version number not updated)
-improved message when registration fails due to network issues
-fixed crash if user cancels UAC when registering
-Close HttpWebRequest response. Leaking responses could have resulted in connection failures
-write connection failed exception to internal log file

26/04/20131.1.4.0
-user guide documentation
-integrated documentation into MemPro GUI
-fixed crash in call tree view when refreshing groupings
-fixed snapshot view window names
-handle out of memory situation in MemPro x86
-disable launch and connect settings buttons while connected
-fixed crash resizing memory contents panel to less than one column wide
-show warning message no Memory View if snapshot didn't successfully get page data
-Log warning to output window if not recording allocations from the start of the app
-added connection timeout. MemPro will now wait for a connection which mens that all allocations from the app start can be tracked using the launch button
-fixed rare race condition that means that sometimes an unexpected packet would be received and the connection terminated
-Log warning if pagedata not received for a snapshot
-fixed rewind view crash
-fixed problem with copying pdbs to temp storage which would cause symbols to sometimes not display
-clear out old pdb files from temp storage

26/04/20131.1.3.0
-added floating and site license support
-added allocation sizes graph
-Leak View
-Full Snapshots of entire memory state. Used for tracking down unreferenced (leaked) allocations.
-when opening snapshot view, if snapshot view already open show exisitng view
-show warning message box if failed to load any symbols
-optimisation of CallTree view generation
-added % columns to function and types views
-fixed bug with graph not refreshing when resizing
-added memory contents view to Memory view (for full snapshots)
-updated ReadMe.txt
-fixed bugs in rewind view
-added VS2008 solution for MemProLib and sample
-optimised sorting of large data sets
-fixed a few minor issueswith Dock Manager
-optimisations to HDataGrid
-removed all 'using namespace' and unnamed namespaces from MemProLib to avoid clashes
-fixed MemProLib shutdown hang when not connected
-progress bar for saving
-optimised callstack filtering
-fix loading of 64bit .mempro files
-MemProLib: fallback to old system of getting module base address if enumerate modules fails.

02/04/20131.1.2.0
-highlight current row in calltree view
-show message box if already up-to-date when manually checking for update
-updated combined MemProLib cpp/hpp files
-fixed crash reading mempro files

02/04/20131.1.1.0
-renamed virtual view to Memory View
-fixed hang in Memory View when free page range is very large in 64bit apps. Now shows break lines on big ranges.
-fixed VMem view. Profiling x64t apps from x86 MemPro (and vice-versa) wasn't working
-fixed re-loading of symbols after symbol paths updated

29/03/20131.1.0.0 - First commercial version!
-MemPro now shuts down cleanly
-fixed occasional hang when disconnecting and creating a snapshot
-lots of debug logging
-output log window
-x3 speedup of loading and saving
-speedup of MemProLib IsPow2 function - was quite a bottleneck
-10 day free trial and registration process, basic version, pro version, security etc
-app now sends info on all loaded modules
-symbol path automatically detected, no need to enter path to pdb on connect
-can now set symbol paths to help it out
-can now profile apps with multiple dlls
-signature checking on pdb files to check that they match the executable
-fixed shutdown leaks in MemPro
-ask user if they want to embed the allocs and pdb files into the save file and calculate sizes
-incremented MemProLib version number
-MemProLib threads are now named correctly
-added a delay before MemProLib tries to connect to avoid problems starting winsock during global initialisation
-track all allocations before connected in a temporary buffer, then send then when connected. This means that all allocations are always tracked
-made MemProLib shutdown after all other global objects, at least as far as I can. This means that MemPro can be used to check that apps shutdown correctly and don't leak memory
-GUI improvements
-remember window layout
-improved Virtual mem view
-fixed potential crash when auto-update pops up
-fixed types view, now recognises types with spaces in (eg unsigned unt)
-fixed bugs in HDataGrid
-fixed bugs in Docker
-fixed many more bugs - far too many to list here

22/03/2013Beta 1.0.14
-Fixed crash on startup if previous version of MemPro hadn't been installed (introduced in version 1.0.12.0)
-extended beta to 29th March
-fixed crash if demo time exceeded

16/03/2013Beta 1.0.13
-Extended Beta to the 24th March

26/02/2013Beta 1.0.12 - Bug fixes
-Automatic updates
-Error message if the pdb file doesn't exist
-logging and asserts in release

24/12/2012Beta 1.0.11 - Bug fixes
-Fixed crash when taking snapshot using right-click graph context menu
-New feature: Right-click and drag in graph to automatically create snapshot diff

12/12/2012Beta 1.0.10 - Bug fixes, mostly in profiling 64it apps
-fixed page view. Would not show all pages for 64bit apps
-fixed page usage stat for profiling 64bit apps
-Fixed history view. Wouldn't find any allocs when profiling 64bit apps
-fixed save/load of mempro files in mempro64
-fixed potential crash in callstack view showing the source file (if symbols don't match could get an invalid line number)
-added new stack walker that uses RtlVirtualUnwind. Enable in MemPro.cpp by defining USE_RTLVIRTUALUNWIND
-fixed infinite loop walking virtual pages in MemProLib on 64bit platform.
-fixed compiler warning in RingBuffer on 64bit platform

11/12/2012Beta 1.0.9 - Bug fixes
-re-targetted to v100 DIA - to match the one that is actually installed by the installer! Fixes the DIA error when connecting.
-fixed crash opening graph settings before graph view is open
-fixed re-loading of pdb files. Pdb would always fail to copy to temp storage after first connection
-fixed potential namespace issue on ::bind function in MemProLib

25/11/2012Beta 1.0.8 - MemPro 64bit
-64bit version of MemPro
-now uses .net 4.0
-new installer

31/07/2012Beta 1.07 - VMem view and XP support, fixes to History view
-VMem stats view
-Windows XP compatibility
-Registering of DIA message box and website page
-Updated Beta cut-off date
-Fixed crash in callstack view for PC's with one processor
-Fixed compile error in MemPro when not using unicode (changed LPCWSTR to LPCTSTR)
-Fixed crash when app sends empty callstack
-Support for mempro dump files bigger than 2GB
-Fixes to History view
-Fixed rare crash bug in graph view

05/06/2012Beta 1.06 - Callstack view optimisation, allocs dump file, connection bug fix
-Callstack view optimisation. Big optimisation on hdatagrid for very large datasets
-writing out allocs dump file from MemProLib instead of connecting to MemPro
-bugfix: connecting to an app that didn't have wait_for_connect set would occasionally fail due to a race condition
-fixed callstack filtering
-improved error reporting if symbols fail to load
-bugfix: crash when disconnecting at same time as a remote snapshot has been triggered by the app
-bugfix: crash when reconnecting to same app
-bugfix: clicking away from editing an hdatagrid cell would result in the new value submitted to the wrong cell

26/05/2012Beta 1.05 - Callstack Grouping, Take snapshots anywhere on graph. Lots of bug fixes.
-Removed MemProLib dependency on Dbghelp.lib
-Link to Ws2_32.lib from code using pragma
-datagrid improvements
-improved feedback on open file failure
-improved feedback on connection fails
-callstack grouping
-bugfix: reading mempro file would fail if already in session
-taking snapshots at any point on the graph
-triggering a snapshot from the app being profiled
-improved diff snapshots dialog
-progress bar for reading mempro files
-fixed divide by zero in callstack view if no data was collected
-decreased graph update interval
-added ENABLE_MEMPRO define so that MemPro can easily be disabled when not needed
-removed PCH from MemProLib
-added MEMPRO_TRACK_ALLOC and MEMPRO_TRACK_FREE for easy tracking of allocs. Define out when mempro is disabled
-changed to secure version of memcpy
-use LARGEADDRESSAWARE link flag so that the 32bit app can now use 3Gb
-HDatagrid fixes
-auto-expand, expand/collapse recursive in callstack view context menu
-added secondary port that is used if the primary port fails
-added 'recent files' menu item
-added 'save as' menu item
-moved session settings into preferences dialog
-lots more minor bug fixes and usability improvements

01/05/2012Beta 1.04 - General bug fixes and optimisations, including fixing new issues introduced in Beta 1.03
-fixed refresh bug with callstack view when scrolling
-fixed callstack view showing incorrect totals when filtering callstacks
-fixed crash saving before a session has started
-fixed column sorting
-fixed mouse wheel scrolling in datagrid
-highlight entire row in callstack view
-optimised callstack view refresh when resizing
-fixed horz scroll bar obscuring last datagrid row

29/04/2012Beta 1.03 - Load/save fix, source code view, horizontal scrolling, bug fixes
-fixed loading and saving of .prof files
-horizontal scrolling of callstack datagrid columns
-ctrl-C copy from datagrid
-no longer locks pdb file
-right click on callstack row to expand/collapse all (or shift click)
-fixed graph bug when re-starting a session
-fixed crash clicking on History button before session started
-fixed bug where opting not to save the current session would mean the new session would not start
-symbol files and alloc files are now packed into .prof files so that they are totally self contained (alloc file is optional)
-Improved error reporting on read/write failure
-general datagrid improvements
-improvements to datagrid scrolling and page up/down
-Docker fixes for MDI child windows
-Now uses VMem allocator to boost performance

29/03/2012Beta 1.02 - Allocation type view, and minor bug fixes.
-removed inclusive column from callstack view
-made it sort by size by default
-fixed bug in graph view where scrolling would stick to mouse
-right click in graph view for context menu
-selecting of snapshots in graph view
-tidy-up of mainform layout
-snapshot progress bar
-show snapshot name in snapshot info view
-Types view for showing classes
-fixed Docker resizing issues
-fixed HDatagrid bug if the string edit box loses focus
-symbols now resolved when view opens (speeds up snapshots)
-fixed compile warning about sign mismatch in MemProLib
-made MemProLib work with dlls
-MemProLib now outputs more debug info on failure to connect
-fixed benign disconnect warning output
-added setup instructions comment to MemPro.hpp
-fixed graph bug when loading in a .allocs file
-progress bar when reading in .allocs file

14/01/2012Beta 1.01 - Minor bug fixes
-Fixed a few Docker bugs, windows getting activated incorrectly, a few problems with maximised MDI tabs, and closing windows.
-Installer now removes previous version
-Fixed a few bugs in HDataGrid, select box when scrolling, crash drag selecting invalid cells, cells not updating correctly when clicking when scrolled, minor cell refresh problems.
-Debug output "Waiting for connection to MemPro" in MemProLib

29/10/2011Beta 1.0
-MemPro Beta 1.0 Release
Subscribe
Stay informed of the latest releases

twitter
facebook

Setup:
Insert these two lines into your code:

#define OVERRIDE_NEW_DELETE
#include "src_combined\MemPro.cpp"

You will then be able to connect to your app using MemPro.exe.

See the User Guide for more details.

It's that simple!
MemPro only runs on Windows, but can connect to and profile apps on virtually any platform, including Unix/GCC

Supported platforms:
Windows 8 (32/64 bit)
Windows 7 (32/64 bit)
Windows Vista
Windows XP

Supported tools
Visual Studio 2012
Visual Studio 2010
Visual Studio 2008
Visual Studio 2005
Unix/GCC
MFC


Questions? Please read the MemPro FAQ

© Copyright 2011 - 2013 Stewart Lynch
slynch@puredevsoftware.com

website design: Stewart Lynch