Valpyk

Valpyk is a Valgrind log parser:

  1. Parse plain text Valgrind log
  2. Filter errors and memory leaks using Python functions
  3. Remove duplicates
  4. Display errors and top 10 memory leaks (sorted by size)

See also Valgrind homepage.

Download

Download last version of Valpyk: valpyk.py

You can also read source code online: valpyk.py

Why?

It's hard to read Valgrind raw logs. Valpyk cleanup data and give smart output: skip addresses, process identifier, etc. Example:

Valgrind log:

==14125== 61,320 bytes in 15 blocks are still reachable in loss record 35 of 35
==14125==    at 0x401C422: malloc (vg_replace_malloc.c:149)
==14125==    by 0x48D3415: my_once_alloc (in /usr/lib/libmysqlclient.so.15.0.0)
==14125==    by 0x48D37DD: (within /usr/lib/libmysqlclient.so.15.0.0)
==14125==    by 0x48D40AF: (within /usr/lib/libmysqlclient.so.15.0.0)
==14125==    by 0x48D44A1: get_charset_by_csname (in /usr/lib/libmysqlclient.so.15.0.0)
==14125==    by 0x48F0993: mysql_real_connect (in /usr/lib/libmysqlclient.so.15.0.0)
==14125==    by 0x4871A2C: mysql_conn_init (mysql.c:227)
==14125==    by 0x4871091: get_mysql_handler (mysql.c:80)
==14125==    by 0x4871176: mysql_close_open_user_sessions (mysql.c:102)
==14125==    by 0x48718EF: init_module_from_conf (mysql.c:196)
==14125==    by 0x805C707: load_modules_from (modules.c:315)
==14125==    by 0x805CCCA: load_modules (modules.c:407)

Valpyk output:

Memory leak: 61320 bytes
   > malloc() at vg_replace_malloc.c:149
   > my_once_alloc()
   > -unknow-
   > -unknow-
   > get_charset_by_csname()
   > mysql_real_connect()
   > mysql_conn_init() at mysql.c:227
   > get_mysql_handler() at mysql.c:80
   > mysql_close_open_user_sessions() at mysql.c:102
   > init_module_from_conf() at mysql.c:196
   > load_modules_from() at modules.c:315
   > load_modules() at modules.c:407