[builds/windows] Improve debugging.
* builds/windows/ftdebug.c (FT_Message, FT_Panic): Buffer output and call `OutputDebugStringA` only if `IsDebuggerPresent`. [_WIN32_WCE] (OutputDebugStringA): Implement the missing API.
This commit is contained in:
parent
3b45f564e9
commit
03380482ce
|
@ -93,28 +93,57 @@
|
||||||
|
|
||||||
#ifdef FT_DEBUG_LEVEL_ERROR
|
#ifdef FT_DEBUG_LEVEL_ERROR
|
||||||
|
|
||||||
#include <stdarg.h>
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
|
||||||
|
FT_LOACAL_DEF( void )
|
||||||
|
OutputDebugStringA( LPCSTR lpOutputString )
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
LPWSTR lpOutputStringW;
|
||||||
|
|
||||||
|
|
||||||
|
/* allocate memory space for converted string */
|
||||||
|
len = MultiByteToWideChar( CP_ACP, MB_ERR_INVALID_CHARS,
|
||||||
|
lpOutputString, -1, NULL, 0 );
|
||||||
|
|
||||||
|
lpOutputStringW = (LPWSTR)_alloca( len * sizeof ( WCHAR ) );
|
||||||
|
|
||||||
|
if ( !len || !lpOutputStringW )
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* now it is safe to do the translation */
|
||||||
|
MultiByteToWideChar( CP_ACP, MB_ERR_INVALID_CHARS,
|
||||||
|
lpOutputString, -1, lpOutputStringW, len );
|
||||||
|
|
||||||
|
OutputDebugStringW( lpOutputStringW );
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _WIN32_WCE */
|
||||||
|
|
||||||
|
|
||||||
/* documentation is in ftdebug.h */
|
/* documentation is in ftdebug.h */
|
||||||
|
|
||||||
FT_BASE_DEF( void )
|
FT_BASE_DEF( void )
|
||||||
FT_Message( const char* fmt,
|
FT_Message( const char* fmt,
|
||||||
... )
|
... )
|
||||||
{
|
{
|
||||||
static char buf[8192];
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
|
|
||||||
va_start( ap, fmt );
|
va_start( ap, fmt );
|
||||||
vfprintf( stderr, fmt, ap );
|
vfprintf( stderr, fmt, ap );
|
||||||
/* send the string to the debugger as well */
|
if ( IsDebuggerPresent() )
|
||||||
vsprintf( buf, fmt, ap );
|
{
|
||||||
|
static char buf[1024];
|
||||||
|
|
||||||
|
|
||||||
|
vsnprintf( buf, sizeof buf, fmt, ap );
|
||||||
OutputDebugStringA( buf );
|
OutputDebugStringA( buf );
|
||||||
|
}
|
||||||
va_end( ap );
|
va_end( ap );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,13 +154,19 @@
|
||||||
FT_Panic( const char* fmt,
|
FT_Panic( const char* fmt,
|
||||||
... )
|
... )
|
||||||
{
|
{
|
||||||
static char buf[8192];
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
|
|
||||||
va_start( ap, fmt );
|
va_start( ap, fmt );
|
||||||
vsprintf( buf, fmt, ap );
|
vfprintf( stderr, fmt, ap );
|
||||||
|
if ( IsDebuggerPresent() )
|
||||||
|
{
|
||||||
|
static char buf[1024];
|
||||||
|
|
||||||
|
|
||||||
|
vsnprintf( buf, sizeof buf, fmt, ap );
|
||||||
OutputDebugStringA( buf );
|
OutputDebugStringA( buf );
|
||||||
|
}
|
||||||
va_end( ap );
|
va_end( ap );
|
||||||
|
|
||||||
exit( EXIT_FAILURE );
|
exit( EXIT_FAILURE );
|
||||||
|
|
Loading…
Reference in New Issue