C/C++ software tracing enables developers and also end-users to create traces, i.e., time-ordered collections of runtime events, from a C/C++ software system running natively on the operation system (e.g., Windows). The technology performs a combination of compile-time and execution-time instrumentation to enable users to switch the runtime event collection mechanism on and off at any point in time during execution. During the switching step, which takes less than some seconds, binary code of the running software system is augmented with additional code that creates and collects runtime events. While the mechanism is switched off, no performance overhead is experienced.
This technology is useful in kinds of situations: when the software system is executed in a test environment by developers and when it is executed on the customer’s site in the production environment.
During development, the technology enables developers to observe what is happening within the “black box” while the system executes. As the technology collects information about the complete execution history, it is the basis for powerful tools as complements to usual “point-in-time” debuggers.
In the production environment the technology can be helpful to reduce the typically cost-intensive procedure of finding out why a system fails in the production environment on the customer’s site even if the system behaves correctly in the test environment on the developers’ site. With the technology, customers of the software create a trace when the system does not behave as expected. This trace is sent to the developers, which enables them to quickly find the origin for the misbehavior without extensive “problem communication” between customer and development or even having to travel to the customer’s site and debug the problem there.