Running valgrind on a project written using autotools displays brief summaries

I am compiling a project with automake, but when I try to run valgrind in the resulting executable, it does not behave as expected, appearing 8 times before actually executing the code I want to check and the heap summary since this code fragment is not displayed at all :

==4601== Memcheck, a memory error detector ==4601== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al. ==4601== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info ==4601== Command: ./launcher -g ../data/params.txt ==4601== ==4605== ==4605== HEAP SUMMARY: ==4605== in use at exit: 0 bytes in 0 blocks ==4605== total heap usage: 0 allocs, 0 frees, 0 bytes allocated ==4605== ==4605== All heap blocks were freed -- no leaks are possible ==4605== ==4605== For counts of detected and suppressed errors, rerun with: -v ==4605== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) ==4604== ==4604== HEAP SUMMARY: ==4604== in use at exit: 0 bytes in 0 blocks ==4604== total heap usage: 0 allocs, 0 frees, 0 bytes allocated ==4604== ==4604== All heap blocks were freed -- no leaks are possible ==4604== ==4604== For counts of detected and suppressed errors, rerun with: -v ==4604== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) ==4606== ==4606== HEAP SUMMARY: ==4606== in use at exit: 0 bytes in 0 blocks ==4606== total heap usage: 0 allocs, 0 frees, 0 bytes allocated ==4606== ==4606== All heap blocks were freed -- no leaks are possible ==4606== ==4606== For counts of detected and suppressed errors, rerun with: -v ==4606== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) ==4608== ==4608== HEAP SUMMARY: ==4608== in use at exit: 0 bytes in 0 blocks ==4608== total heap usage: 0 allocs, 0 frees, 0 bytes allocated ==4608== ==4608== All heap blocks were freed -- no leaks are possible ==4608== ==4608== For counts of detected and suppressed errors, rerun with: -v ==4608== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) ==4607== ==4607== HEAP SUMMARY: ==4607== in use at exit: 0 bytes in 0 blocks ==4607== total heap usage: 0 allocs, 0 frees, 0 bytes allocated ==4607== ==4607== All heap blocks were freed -- no leaks are possible ==4607== ==4607== For counts of detected and suppressed errors, rerun with: -v ==4607== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) ==4610== ==4610== HEAP SUMMARY: ==4610== in use at exit: 0 bytes in 0 blocks ==4610== total heap usage: 0 allocs, 0 frees, 0 bytes allocated ==4610== ==4610== All heap blocks were freed -- no leaks are possible ==4610== ==4610== For counts of detected and suppressed errors, rerun with: -v ==4610== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) ==4613== ==4613== HEAP SUMMARY: ==4613== in use at exit: 0 bytes in 0 blocks ==4613== total heap usage: 0 allocs, 0 frees, 0 bytes allocated ==4613== ==4613== All heap blocks were freed -- no leaks are possible ==4613== ==4613== For counts of detected and suppressed errors, rerun with: -v ==4613== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) ==4614== ==4614== HEAP SUMMARY: ==4614== in use at exit: 0 bytes in 0 blocks ==4614== total heap usage: 0 allocs, 0 frees, 0 bytes allocated ==4614== ==4614== All heap blocks were freed -- no leaks are possible ==4614== ==4614== For counts of detected and suppressed errors, rerun with: -v ==4614== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) [Program output appears here, nothing appears afterwards] 

There were no such problems when compiling with the standard make file, and valgrind would display exactly what I expected. makefile.am , which I use to compile the directory, looks like this:

 lib_LTLIBRARIES = libfile_util.la libmath_util.la libgeneral_util.la libparamlist.la libfile_util_la_SOURCES = file_util.c file_util.h libmath_util_la_SOURCES = math_util.c math_util.h libgeneral_util_la_SOURCES = general_util.c general_util.h libparamlist_la_SOURCES = paramlist.c paramlist.h bin_PROGRAMS = launcher generator_CFLAGS = -I/usr/include/muParser generator_SOURCES = generator.c generator.h estimator_SOURCES = estimator.c estimator.h estimator_iwls_SOURCES = estimator_IWLS.c estimator.h estimator_piecewise_SOURCES = estimator_IWLS.c estimator_piecewise.c estimator.h estimator_baseline_SOURCES = estimator_IWLS.c estimator_piecewise.c estimator_baseline.c estimator.h launcher_CFLAGS = -I/usr/include/muParser launcher_SOURCES = launcher.c generator.c estimator.c estimator.h generator.h generator_LDADD = libfile_util.la libmath_util.la libgeneral_util.la libparamlist.la launcher_LDADD = libfile_util.la libmath_util.la libgeneral_util.la libparamlist.la estimator_iwls_LDADD = libfile_util.la libmath_util.la libgeneral_util.la libparamlist.la estimator_piecewise_LDADD = libfile_util.la libmath_util.la libgeneral_util.la libparamlist.la estimator_baseline_LDADD = libfile_util.la libmath_util.la libgeneral_util.la libparamlist.la 

Is this a problem with how automake compiles files? If so, what am I doing wrong in the makefile?

+4
source share
1 answer

Since launcher uses the libtool library, the file that is in your build directory is a shell script that sets up the necessary environment variables to run the real binary (usually hidden in .libs/ ). Doing valgrind on that script will debug the shell executing the script, not your real binary.

The correct way to execute any command like valgrind or gdb in the libtool binary is to use the libtool command:

 libtool --mode=execute valgrind ./launcher -g ../data/params.txt 

You can even abbreviate it as:

 libtool e valgrind ./launcher -g ../data/params.txt 

This will work no matter how the launcher was compiled.

Relevant libtool documentation here .

+8
source

All Articles