Development
Building debug version of Aspectator
To build a debug version of Aspectator you can either run the following command:
$ make -j16 debug
or make the appropriate actions by hand. The first action is to create a separate directory for it, say:
$ mkdir build-debug
$ cd build-debug
Then you need to configure Aspectator:
$ MAKEINFO=missing ../aspectator/configure --enable-languages=c --disable-multilib --disable-nls --enable-checking=release
and make its debug version:
$ make STAGE1_CXXFLAGS="-g -O0" all-stage1
You can use option -jN for make to essentially speed up building, but it can cause failures (just invoke the command several times to overcome this):
$ make -j16 STAGE1_CXXFLAGS="-g -O0" all-stage1
After making some changes to files starting with ldv- prefix it is strongly recommended to rebuild the debug version of Aspectator with -Werror flag to treat all warnings as errors:
$ make STAGE1_CXXFLAGS="-g -O0 -Werror" all-stage1
To debug Aspectator you can use gdb or ddd:
$ ddd gcc/cc1 &
To debug instrumentation you need to set the following environment variables:
set env LDV_STAGE=3
set env LDV_ASPECT_FILE=$ABS_PATH_TO_ASPECT_FILE
set env LDV_OUT=out.c
To debug C back-end you need to set the following environment variables:
set env LDV_STAGE=4
set env LDV_C_BACKEND_OUT=out.c
Note
These instructions were adapted from http://gcc.gnu.org/wiki/DebuggingGCC.
Profiling Aspectator
Sometimes developers need to track whether some memory issues (e.g. memory leaks, use after free, etc.) were introduced and to measure algorithms complexity. First of all you need to build a debug version of Aspectator (Building debug version of Aspectator) and install extra tools such as valgrind, valkyrie and kcachegrind.
Tracking memory issues of Aspectator
To track memory issues you need to run Aspectator under valgrind (do not specify –suppressions if you do not have them):
LDV_ASPECT_FILE=$PATH_TO_ASPECT_FILE \
LDV_STAGE=$STAGE \
LDV_OUT=$PATH_TO_OUT \
valgrind \
--tool=memcheck \
--leak-check=yes \
--suppressions=gcc.supp \
--num-callers=500 \
--xml=yes \
--xml-file=output.xml \
$PATH_TO_ASPECTATOR_BUILD_DEBUG/gcc/cc1 \
$PATH_TO_INPUT_FILE
After that you can either inspect output.xml manually or use valkyrie:
$ valkyrie -l output.xml
Tracking CPU time issues of Aspectator
To measure CPU time consumption you need to run Aspectator under valgrind:
LDV_ASPECT_FILE=$PATH_TO_ASPECT_FILE \
LDV_STAGE=$STAGE \
LDV_OUT=$PATH_TO_OUT \
valgrind \
--tool=callgrind \
$PATH_TO_ASPECTATOR_PROFILED_DEBUG/gcc/cc1 \
$PATH_TO_INPUT_FILE
After that you can either inspect files callgrind.out.* manually or use some tool, e.g. kcachegrind:
$ kcachegrind -l callgrind.out.*