Logo
MemPro MemPro


MemPro x86 version: 1.1.4.0 Download Now (x86)
version: 1.1.3.0
version: 1.1.2.0
version: 1.1.1.0
MemPro x64 version: 1.1.4.0 Download Now (x64)
version: 1.1.3.0
version: 1.1.2.0
version: 1.1.1.0


The free trial version of MemPro lasts 10 days, after that you will have 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 application that connects to your app via MemProLib using a TCP connection

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.



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.









Known Bugs
  • Resizing the memory contents panel in the memory view will crash if it is less than one column wide. This will be fixed in 1.1.4.0




Versions

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 "MemProCpp\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!
Supported platforms:
Windows 7 32bit
Windows 7 64bit
Windows Vista
Windows XP

Supported tools
Visual Studio 2012
Visual Studio 2010
Visual Studio 2008
Visual Studio 2005

MemPro can link to:
32bit and 64bit windows apps
Also supports MFC

Questions? Please read the MemPro FAQ

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

website design: Stewart Lynch