NoBug

NoBug is a library which provides assertions, logging statements, and annotations for C and C++ programs. It includes pre-/post-condition and invariant checks, as well as generic assertions. Checks are enabled based on build-levels and scope tags. It also includes debugger support (valgrind), dumping of data structures, logging your application's activities, runtime customizable logging via environment variables, different logging targets (ringbuffer, stderr, syslog, debugger, etc.), and annotation of your source code regarding known bugs, things to do, and planned things. It can track resources and detect deadlocks.

Recent releases

Release Notes: Major documentation improvements. A PDF for a hard copy can now be generated. Some small bugfixes. A new experimental fault coverage checking facility that allows one to find out if all possible error paths are sufficiently handled. Functionality to reset the resource tracker to a pristine state.

Release Notes: Improved support for non-gcc compilers (sun cc) and non-Linux OSes. NoBug is usable on Solaris now (some testsuite fixes are still pending). An obscure bug with C++ and the (there) unspecified __func__ keyword has been fixed by adding much improved compiler/language detection. Some Documentation improvements and
cosmetics. There is a mailing list now.

Release Notes: This release adds a PLANNED_TEST() macro to test.h to annotate planned tests. It adds a 'void* extra' parameter to the DUMP and INVARIANT macros to pass user data along. Invariant functions must be prefixed with 'nobug_', and all mpool functions with 'nobug_'. The library version number has been bumped. This release is slightly incompatible with older releases; fixes are trivial. This is a prerelease for review; some documentation improvements and a stable release will follow soon.

Release Notes: Certain boring strings were replaced with a '-' in passed contexts. Multiline continued log lines have a special event mark (!) now. A race condition when starting threads accessing resources was fixed; this introduces the block syntax for resource tracker macros again. Programs have to be adapted to take advantage of this. The internal locking got a big overhaul.

Release Notes: The logging core was refactored, so it now supports multiline logging. Log statements can contain newline characters, which will emit to multiple loglines atomically; resource dumping uses this feature. The nobug libraries are now properly versioned. Internal ringbuffer documentation was added. The ringbuffer guard pages can now be dynamically configured. Resource logging stays active in BETA builds in preparation for offline resource tracking. Release targets for make were improved, which means more frequent releases in future.