23:59:59.123456 git.c:312 trace: built-in: git 'foo' 00:00:00.000001 builtin/foo.c:99 foo: some message
The trace API can be used to print debug messages to stderr or a file. Trace code is inactive unless explicitly enabled by setting GIT_TRACE* environment variables.
The trace implementation automatically adds timestamp file:line ... \n to all trace messages. E.g.:
23:59:59.123456 git.c:312 trace: built-in: git 'foo' 00:00:00.000001 builtin/foo.c:99 foo: some message
Defines a trace key (or category). The default (for API functions that don’t take a key) is GIT_TRACE.
E.g. to define a trace key controlled by environment variable GIT_TRACE_FOO:
static struct trace_key trace_foo = TRACE_KEY_INIT(FOO); static void trace_print_foo(const char *message) { trace_print_key(&trace_foo, message); }
Note: don’t use const as the trace implementation stores internal state in the trace_key structure.
Checks whether the trace key is enabled. Used to prevent expensive string formatting before calling one of the printing APIs.
Disables tracing for the specified key, even if the environment variable was set.
Prints a formatted message, similar to printf.
Prints a formatted message, followed by a quoted list of arguments.
Prints the strbuf, without additional formatting (i.e. doesn’t choke on % or even \0).
Returns nanoseconds since the epoch (01/01/1970), typically used for performance measurements.
Currently there are high precision timer implementations for Linux (using clock_gettime(CLOCK_MONOTONIC)) and Windows (QueryPerformanceCounter). Other platforms use gettimeofday as time source.
Prints the elapsed time (in nanoseconds), or elapsed time since start, followed by a formatted message. Enabled via environment variable GIT_TRACE_PERFORMANCE. Used for manual profiling, e.g.:
uint64_t start = getnanotime(); /* code section to measure */ trace_performance_since(start, "foobar");
uint64_t t = 0; for (;;) { /* ignore */ t -= getnanotime(); /* code section to measure */ t += getnanotime(); /* ignore */ } trace_performance(t, "frotz");