changeset 8051:ac548999eddf draft

(svn r11611) -Codechange: it is now possible to use a define to enable asserts and show them in crash.log for MSVC release builds
author glx <glx@openttd.org>
date Sun, 09 Dec 2007 21:20:21 +0000
parents cbe6f0a1b5b5
children 77bd3ce900d3
files src/blitter/factory.hpp src/driver.h src/stdafx.h src/win32.cpp
diffstat 4 files changed, 20 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/blitter/factory.hpp
+++ b/src/blitter/factory.hpp
@@ -41,7 +41,7 @@
 		if (name == NULL) return;
 
 		this->name = strdup(name);
-#if !defined(NDEBUG)
+#if !defined(NDEBUG) || defined(WITH_ASSERT)
 		/* NDEBUG disables asserts and gives a warning: unused variable 'P' */
 		std::pair<Blitters::iterator, bool> P =
 #endif /* !NDEBUG */
--- a/src/driver.h
+++ b/src/driver.h
@@ -79,7 +79,7 @@
 		strecpy(buf, GetDriverTypeName(type), lastof(buf));
 		strecpy(buf + 5, name, lastof(buf));
 
-#if !defined(NDEBUG)
+#if !defined(NDEBUG) || defined(WITH_ASSERT)
 		/* NDEBUG disables asserts and gives a warning: unused variable 'P' */
 		std::pair<Drivers::iterator, bool> P =
 #endif /* !NDEBUG */
--- a/src/stdafx.h
+++ b/src/stdafx.h
@@ -207,6 +207,13 @@
 		#define strcasecmp stricmp
 		#define strncasecmp strnicmp
 	#endif
+
+	void SetExceptionString(const char* s, ...);
+
+	#if defined(NDEBUG) && defined(WITH_ASSERT)
+		#undef assert
+		#define assert(expression) if (!(expression)) { SetExceptionString("Assertion failed at %s:%d: %s", __FILE__, __LINE__, #expression); *(byte*)0 = 0; }
+	#endif
 #endif /* defined(_MSC_VER) */
 
 #if defined(WINCE)
--- a/src/win32.cpp
+++ b/src/win32.cpp
@@ -81,6 +81,17 @@
 
 #ifdef _MSC_VER
 static const char *_exception_string = NULL;
+void SetExceptionString(const char *s, ...)
+{
+	va_list va;
+	char buf[512];
+
+	va_start(va, s);
+	vsnprintf(buf, lengthof(buf), s, va);
+	va_end(va);
+
+	_exception_string = strdup(buf);
+}
 #endif
 
 void ShowOSErrorBox(const char *buf)