I am looking for a gratis cross platform debug trace log system - which you have used for several years and can recommend from experience.
Must have
- gratis, with a permissive license (e.g prefer MIT over GPL (which is still acceptable))
- C / C++ interface
- different tracing levels e.g info, warning, error, etc
- can be easily compiled away to generate no code (e.g. by #ifdef)
- at least one user defined qualifier or each trace. E.g subsystem / thread Id
- consistent layout, easily parsable by user written scripts
- automatic file of file and line number of each trace item
- auto time-stamping of each entry
- mature, stable and well documented + supported
- no problems with multi-threading , and preferably auto-recording of thread Id
- simple and easy to include in a project (prefer single #include, with no need to set #include path)
Nice to have
- output over serial, as well as to
stdout
- trace item type (e.g interface, database access, memory allocate/free)
- auto-generate detailed information about exceptions
- the ability to dump data structures, not just simple data types
- ditto arrays
- ditto nested structures, dumped in some form of tree format
- command to trace stack size
- and stack backtrack (years later, I wonder what this actually means ;-)
- and free/used memory
- encrypted output, decryptable by password
- lots of gratis post-processing tools (see below)
- choice of output (screen, file, TCP/UDP ...)
- adjust tracing levels from within the code at run-time
Personally, I have coded many of these over the decades, and left them behind as I changed companies. I tend to code scripts to post–process them, drawing Message Sequence Charts, or histograms of memory usage, etc. I like to examine only trace items of a certain type (all interrupts, or exceptions), or for a given file or subsystem, etc
A nice GUI would be welcome, as would the ability to jump to the trace file line corresponding to a message on a Message Sequence Chart, or even source code line corresponding to a trace file line. The GUI should allow the easy de/selection of trace types, subsystems, etc (e.g, show me only message send & memory allocate for subsystems F & T).
In short, the more features the better, so long as they do not hinder flexibility.