11.8.4 Debugging and profiling foreign code (valgrind)
This section is only relevant for Unix users on platforms supported by valgrind. Valgrind is an excellent binary instrumentation platform. Unlike many other instrumentation platforms, valgrind can deal with code loaded through dlopen().
The callgrind tool can be used to profile foreign code loaded
under SWI-Prolog. Compile the foreign library adding -g
option to gcc or swipl-ld. By setting the environment
variable VALGRIND
to yes
, SWI-Prolog will not
release loaded shared objects using dlclose(). This trick is required to
get source information on the loaded library. Without, valgrind claims
that the shared object has no debugging information.180Tested
using valgrind version 3.2.3 on x64. Here is the complete
sequence using bash as login shell:
% VALGRIND=yes valgrind --tool=callgrind pl <args> <prolog interaction> % kcachegrind callgrind.out.<pid>