2.7 KiB
T tracer - a simple tutorial
There is a diff file with all modifications: howto_new_trace.patch. We use tag 2023.w28 To use the patch, clone the repository, then in the top directory of openairinterface:
git checkout 2023.w28
patch -p1 < common/utils/T/DOC/T/howto_new_trace.patch
Then compile nr-softmodem as usual.
1 - create a new trace
As an example, let's add a new trace to dump LDPC decoding success.
In the file common/utils/T/T_messages.txt
we add those two lines:
ID = LDPC_OK
FORMAT = int,segment : int,nb_segments : int,offset : buffer,data
- You create an ID for the new trace.
- You give the format as a list of variables with there types.
Then, in the file openair1/SCHED_NR/phy_procedures_nr_gNB.c,
in function nr_postDecode(), we add, at the place where we want to trace:
T(T_LDPC_OK,
T_INT(rdata->segment_r),
T_INT(rdata->nbSegments),
T_INT(rdata->offset),
T_BUFFER(ulsch_harq->c[r], rdata->Kr_bytes - (ulsch_harq->F>>3) -((ulsch_harq->C>1)?3:0)));
And that's all, the code is instrumented, a trace is created, we now need a tracer to process the trace.
2. create a tracer
See trace_ldpc.c in the attached diff. Read it, there is documentation.
To compile, just do make trace_ldpc in common/utils/T/tracer
To use: cd common/utils/T/tracer; ./trace_ldpc -d ../T_messages.txt
Your tracer can do whatever it wants with the data.
The Makefile has been modified to compile it. See the diff.
Use it as a basis for your own tracer.
You can also look at the other tracers, especially textlog.c
and macpdu2wireshark.c which are the most useful for me to
trace/debug the nr-softmodem.
3. available types in a trace
You trace the code with:
T(T_trace_name, T_xxx(variable1), T_xxx(variables2), ...);
T_xxx can be:
T_INT(variable)T_FLOAT(variable)(not tested much, may fail)T_BUFFER(variable, length)T_STRING(variable)T_PRINTF(format, arg1, ... argn)
What is traced is obvious from the name. T_INT traces an int for example.
corresponding type to put in T_messages.txt
T_INT: intT_FLOAT: floatT_BUFFER: bufferT_STRING: stringT_PRINTF: string
And that's all.
You can add as many traces as you want, just add them in T_messages.txt,
put the T() macro in the code where you want to trace, and modify your
tracer to deal with it.
An alternative to writing your own tracer could be to use textlog
with -full command line and process the text with some external
tools.
It is also possible to record the events in a file using the tracer
record and then use replay to process the recorded file later.