/dbg-macro

A set of dbg(…) macros for C

Primary LanguageCMIT LicenseMIT

buildstatus codecov nala

About

A few macros that prints and returns the value of a given expression for quick and dirty debugging, inspired by Rusts dbg!(…) macro and its C++ variant.

dbg(expr) for primitive data types (int, float, etc.), strings and pointers.

dbgb(expr) to force boolean true/false output.

dbga(expr, length) for array of primitive data types.

dbgh(expr, size) for hexdump output.

dbge(expr) for negative error codes.

dbgbt() for a backtrace.

Just include dbg.h in your project to use it.

Example

tryit

See examples for the files used in this example.

#include "dbg.h"

static int factorial(int n)
{
    if (dbgb(n <= 1)) {
        return dbg(1);
    } else {
        return dbg(n * factorial(n - 1));
    }
}

int main()
{
    char message[] = "hello";
    dbg(message);  // main.c:15: message = "hello"
    dbgh(message, sizeof(message));

    const int a = 2;
    const int b = dbg(3 * a) + 1;  // main.c:19: 3 * a = 6 (0x6)

    int numbers[2] = { b, 13 };
    dbga(numbers, 2);  // main.c:22: numbers = [7, 13] (length: 2)

    dbg(factorial(4));
    dbge(-EINVAL);
    dbgbt();

    return (0);
}

Build and run:

https://github.com/eerimoq/dbg-macro/raw/master/docs/example-build-and-run.png

Compile time configuration

Define NDBG to make the macros a no-op.

Define DBG_NCOLOR for colorless output.

Define DBG_OSTREAM=<my-ostream> for custom output stream (stderr by default).