[SciPy-dev] Valgrind primer

Travis Oliphant oliphant at ee.byu.edu
Fri Nov 4 18:27:52 CST 2005

I've been playing with valgrind to detect memory leaks and other memory 
errors in scipy.  It's a pretty nice tool.   It often comes with most 
Linux distributions (on my system urpmi valgrind installed it for me).

To use it to debug extension modules, you should have a Python compiled 
with debugging symbols (-g) option.  This will add debugging symbols to 
extension modules as well.    There is a file Misc/valgrind-python.supp 
in the standard Python distribution that is needed to suppress some 
useless Python memory warnings. 

Then you can generate some useful output to the file testmem.pid<num> 
using something like

valgrind --tool=memcheck --leak-check=yes --error-limit=no -v 
--log-file=testmem --suppressions=valgrind-python.supp 
--show-reachable=yes --num-callers=7 python leaktest.py

where leaktest.py is a file that exercises your code: i.e

import scipy

Currently, my version of valgrind is issuing an illegal instruction in 
eigenvalue computation when I run scipy.test(10,10) under valgrind.  
That's probably O.K. because it would take a long time to finish anyway.

Everything runs a lot slower under valgrind, but you get some useful 
information when it's done.

Feel free to post questionable items from your valgrind-generated log 
files to this list (be sure they involve the PyArray_<something> or 
PyUFunc_<something> C-API though.  You may get errors from the Python 
C-API too, but we can't fix those if needed here.).

More information about the Scipy-dev mailing list