Retracing is the process of determining unknown function names and associated source file name and line number to each stack frame. The process differs for every problem type (coredump requires the appropriate binaries and debuginfos, kerneloops requires the unstripped kernel modules, python does not require anything as it already outputs all the information within the stacktrace, ...), therefore it is managed by the problem plugin.
FAF's generic retracing algorithm consists of 3 steps:
- Get the symbols that need retracing -
- Find the associated packages (debuginfos, binaries, sources) -
- Execute the retrace when everything is ready -
The retrace process itself is controlled by a single action
Retraced symbols can be transferred between FAF instances. If one instance (slave) is unable to (or doesn't want to) have debuginfos, it can get retraced symbols from the one that is (master). In its basic mode, only the symbols fully retraced on the master instance are transferred. In advanced mode, a password is shared between the instances and the slave instance can even add its own symbols for retracing on the master instance like this:
- Slave requests a symbol from the master.
- Symbol is not found on the master. Master saves the symbol to to mock backtrace.
- Symbol is retraced on the master in regular retracing.
- Next time the symbol is requested by the slave, master successfully returns it.
See https://github.com/abrt/faf/pull/387 for details.