/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /** * bonobo-debug.c: A runtime-controllable debugging API. * * Author: * Jaka Mocnik */ #include #include #include #include #include BonoboDebugFlags _bonobo_debug_flags; static FILE *_bonobo_debug_file; void bonobo_debug_init(void) { const GDebugKey debug_keys[] = { { "refs", BONOBO_DEBUG_REFS }, { "aggregate", BONOBO_DEBUG_AGGREGATE }, { "lifecycle", BONOBO_DEBUG_LIFECYCLE }, { "running", BONOBO_DEBUG_RUNNING }, { "object", BONOBO_DEBUG_OBJECT } }; const char *env_string; _bonobo_debug_flags = BONOBO_DEBUG_NONE; env_string = g_getenv ("BONOBO_DEBUG"); if (env_string) _bonobo_debug_flags |= g_parse_debug_string (env_string, debug_keys, G_N_ELEMENTS (debug_keys)); _bonobo_debug_file = NULL; env_string = g_getenv ("BONOBO_DEBUG_DIR"); if(env_string) { gchar *dbg_filename; dbg_filename = g_strdup_printf("%s/bonobo-debug-%d", env_string, getpid()); _bonobo_debug_file = g_fopen(dbg_filename, "w"); g_free(dbg_filename); } if(_bonobo_debug_file == NULL) _bonobo_debug_file = stderr; } void bonobo_debug_print (const char *name, char *fmt, ...) { va_list args; va_start (args, fmt); fprintf (_bonobo_debug_file, "[%06d]:%-15s ", getpid (), name); vfprintf (_bonobo_debug_file, fmt, args); fprintf (_bonobo_debug_file, "\n"); fflush (_bonobo_debug_file); va_end (args); }