-
-
Notifications
You must be signed in to change notification settings - Fork 104
Trace
Note: this is experiemental and proves to be unstable with the AIO libraries, it was used during development of the emulator and provides a novel function for small experiements, it should not be used for serious debugging of the entire emulator as this will cause errors.
Tracing, found in lib/tracer is instrumented using GCC's function instrumentation.
Running
cmake -DTRACE_FUNCTIONS=ON ..
will include the constructor, destructor and the needed __cyg_profile_func_xxx
functions that are called upon entry and exit of any functions called during the execution of the program.
These callback functions are implemented to log the function, caller and timestamp of each function calls, written to a file named trace.out
.
As the values written out are memory offsets and, as such, are not human readable the trace dump must be processed by the script readtracelog.sh
which uses addr2line
to convert the memory offsets into human readable function calls, done using the memory map of the compiled executable.
Adding something like
+void printhello(void)
+{
+ printf("hello");
+}
+
int main(int argc, char *argv[])
{
+ printhello();
To your code and then compiling and running the executable, after passing -DTRACE_FUNCTIONS=ON
to cmake of course, you will be presented with an output similar to
x 0x55e138f918a9 0x55e138f9fe4d 1587039262
e 0x55e138f92f72 0x7f2117466023 1587039262
e 0x55e138f92f34 0x55e138f92f99 1587039262
x 0x55e138f92f34 0x55e138f92f99 1587039262
e 0x55e138f918f0 0x7f2117bb242b 1587039262
After processing using the provided script sorcery, running something such as
./readtracelog.sh ../../bin/FreeRTOS_Emulator ../../build/trace.out
You will see a human readable output that logs the function entries and exit made in the program
Exit trace_begin at 2020-04-16T14:14:22+02:00
Enter main at 2020-04-16T14:14:22+02:00, called from ?? (??:0)
Enter printhello at 2020-04-16T14:14:22+02:00, called from main (main.c:624)
Exit printhello at 2020-04-16T14:14:22+02:00
Enter trace_end at 2020-04-16T14:14:22+02:00, called from ?? (??:0)
Note that the ?? visible in the output above are the result of the function instrumentation only being able to map to functions compiled using the -finstrument-functions
compile flag.
Extenal libraries etc are only linked against and not compiled using this flag, therefore they cannot be instrumented.
Authors: Philipp van Kempen, Alex Hoffman