Added support for sending debugging output to a file.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4410 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -272,6 +272,70 @@ get_tls_handle()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*! \brief Helper class for initializing the debugging output
|
||||||
|
file.
|
||||||
|
|
||||||
|
Note that this hummer isn't threadsafe, but it doesn't really
|
||||||
|
matter for our concerns, since the worst it'll result in is
|
||||||
|
a dangling file descriptor, and that would be in the case of
|
||||||
|
two or more volumes being mounted almost simultaneously...
|
||||||
|
not too big of a worry.
|
||||||
|
*/
|
||||||
|
class DebugOutputFile {
|
||||||
|
public:
|
||||||
|
DebugOutputFile(const char *filename = NULL)
|
||||||
|
: fFile(-1)
|
||||||
|
{
|
||||||
|
Init(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
~DebugOutputFile() {
|
||||||
|
if (fFile >= 0)
|
||||||
|
close(fFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Init(const char *filename) {
|
||||||
|
if (fFile < 0 && filename)
|
||||||
|
fFile = open(filename, O_RDWR | O_CREAT | O_TRUNC);
|
||||||
|
}
|
||||||
|
|
||||||
|
int File() const { return fFile; }
|
||||||
|
private:
|
||||||
|
int fFile;
|
||||||
|
};
|
||||||
|
|
||||||
|
DebugOutputFile out;
|
||||||
|
|
||||||
|
/*! \brief It doesn't appear that the constructor for the global
|
||||||
|
\c out variable is called when built as an R5 filesystem add-on,
|
||||||
|
so this function needs to be called in udf_mount to let the
|
||||||
|
magic happen.
|
||||||
|
*/
|
||||||
|
void initialize_debugger(const char *filename)
|
||||||
|
{
|
||||||
|
out.Init(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
// dbg_printf, stolen from Ingo's ReiserFS::Debug.cpp.
|
||||||
|
void
|
||||||
|
dbg_printf(const char *format,...)
|
||||||
|
{
|
||||||
|
#if DEBUG_TO_FILE
|
||||||
|
char buffer[1024];
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
// no vsnprintf() on PPC and in kernel
|
||||||
|
#if defined(__INTEL__) && USER
|
||||||
|
vsnprintf(buffer, sizeof(buffer) - 1, format, args);
|
||||||
|
#else
|
||||||
|
vsprintf(buffer, format, args);
|
||||||
|
#endif
|
||||||
|
va_end(args);
|
||||||
|
buffer[sizeof(buffer) - 1] = '\0';
|
||||||
|
write(out.File(), buffer, strlen(buffer));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// DebugHelper
|
// DebugHelper
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
//
|
//
|
||||||
// UDF version copyright (c) 2003 Tyler Dauwalder, [email protected]
|
// UDF version copyright (c) 2003 Tyler Dauwalder, [email protected]
|
||||||
// Initial version copyright (c) 2002 Axel Dörfler, [email protected]
|
// Initial version copyright (c) 2002 Axel Dörfler, [email protected]
|
||||||
|
// dbg_printf() function copyright (c) 2003 Ingo Weinhold, [email protected]
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
#ifndef UDF_DEBUG_H
|
#ifndef UDF_DEBUG_H
|
||||||
#define UDF_DEBUG_H
|
#define UDF_DEBUG_H
|
||||||
@@ -19,13 +20,24 @@
|
|||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
# include <string.h>
|
# include <string.h>
|
||||||
#endif
|
#endif
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#ifdef USER
|
#define DEBUG_TO_FILE 0
|
||||||
|
|
||||||
|
#if DEBUG_TO_FILE
|
||||||
|
# include <stdio.h>
|
||||||
|
# include <fcntl.h>
|
||||||
|
# define __out dbg_printf
|
||||||
|
void dbg_printf(const char *format,...);
|
||||||
|
void initialize_debugger(const char *filename);
|
||||||
|
#else
|
||||||
|
# ifdef USER
|
||||||
# include <stdio.h>
|
# include <stdio.h>
|
||||||
# define __out printf
|
# define __out printf
|
||||||
#else
|
# else
|
||||||
# include <null.h>
|
# include <null.h>
|
||||||
# define __out dprintf
|
# define __out dprintf
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "cpp.h"
|
#include "cpp.h"
|
||||||
@@ -119,6 +131,12 @@ private:
|
|||||||
// DEBUG-dependent macros
|
// DEBUG-dependent macros
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
#if DEBUG_TO_FILE
|
||||||
|
#define INITIALIZE_DEBUGGING_OUTPUT_FILE(filename) initialize_debugger(filename);
|
||||||
|
#else
|
||||||
|
#define INITIALIZE_DEBUGGING_OUTPUT_FILE(filename) ;
|
||||||
|
#endif
|
||||||
|
|
||||||
#define DEBUG_INIT_SILENT(categoryFlags, className) \
|
#define DEBUG_INIT_SILENT(categoryFlags, className) \
|
||||||
DebugHelper _debugHelper((categoryFlags), className, 2);
|
DebugHelper _debugHelper((categoryFlags), className, 2);
|
||||||
|
|
||||||
@@ -243,6 +261,7 @@ private:
|
|||||||
#define DBG(x) x ;
|
#define DBG(x) x ;
|
||||||
|
|
||||||
#else // ifdef DEBUG
|
#else // ifdef DEBUG
|
||||||
|
#define INITIALIZE_DEBUGGING_OUTPUT_FILE(filename) ;
|
||||||
#define DEBUG_INIT_SILENT(categoryFlags, className) ;
|
#define DEBUG_INIT_SILENT(categoryFlags, className) ;
|
||||||
#define DEBUG_INIT(categoryFlags, className) ;
|
#define DEBUG_INIT(categoryFlags, className) ;
|
||||||
#define DEBUG_INIT_ETC(categoryFlags, className, arguments) ;
|
#define DEBUG_INIT_ETC(categoryFlags, className, arguments) ;
|
||||||
|
|||||||
Reference in New Issue
Block a user