u_debug.h revision a31d289de6091987e6b9da6af1b2e56eb79a96fb
1a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca/************************************************************************** 2a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * 3a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * All Rights Reserved. 5a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * 6a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 7a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * copy of this software and associated documentation files (the 8a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * "Software"), to deal in the Software without restriction, including 9a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * without limitation the rights to use, copy, modify, merge, publish, 10a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * distribute, sub license, and/or sell copies of the Software, and to 11a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * permit persons to whom the Software is furnished to do so, subject to 12a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * the following conditions: 13a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * 14a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * The above copyright notice and this permission notice (including the 15a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * next paragraph) shall be included in all copies or substantial portions 16a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * of the Software. 17a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * 18a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * 26a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca **************************************************************************/ 27a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca 28a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca/** 29a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * @file 30a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * Cross-platform debugging helpers. 31a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * 32a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * For now it just has assert and printf replacements, but it might be extended 33a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * with stack trace reports and more advanced logging in the near future. 34a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * 35a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * @author Jose Fonseca <jrfonseca@tungstengraphics.com> 36a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca */ 37a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca 38a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifndef P_DEBUG_H_ 39a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define P_DEBUG_H_ 40a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca 41a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef __cplusplus 42a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonsecaextern "C" { 43a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif 44a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca 45a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca 46a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef DBG 47a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifndef DEBUG 48a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define DEBUG 1 49a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif 50a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#else 51a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifndef NDEBUG 52a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define NDEBUG 1 53a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif 54a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif 55a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca 56a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca 57a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonsecavoid debug_printf(const char *format, ...); 58a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonsecavoid debug_assert_fail(const char *expr, const char *file, unsigned line); 59a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca 60a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca/** Assert macro */ 61a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef DEBUG 62a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define debug_assert(expr) ((expr) ? (void)0 : debug_assert_fail(#expr, __FILE__, __LINE__)) 63a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#else 64a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define debug_assert(expr) ((void)0) 65a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif 66a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca 67a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca 68a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef assert 69a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#warning Standard C Library assert macro usage detected. 70a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#undef assert 71a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif 72a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define assert(expr) debug_assert(expr) 73a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca 74a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca 75a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef __cplusplus 76a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca} 77a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif 78a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca 79a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif /* P_DEBUG_H_ */ 80