Minor enhancement to improve debugging

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@20775 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
CaS 2005-02-22 14:06:28 +00:00
parent 0708409c1b
commit 89dd47ec16
6 changed files with 61 additions and 8 deletions

View file

@ -1,3 +1,12 @@
2005-02-22 14:00 Richard Frith-Macdonald <rfm@gnu.org>
* Documentation/Base.gsdoc:
* Source/GSPrivate.h:
* Source/NSDebug.m:
* Source/NSLog.m:
* Source/NSUserDefaults.m:
Add GSLogThread to include thread id in NSLog() and debug output.
2005-02-22 11:12 Richard Frith-Macdonald <rfm@gnu.org>
* Source/GSFFCallInvocation.m:

View file

@ -104,6 +104,15 @@
some reason.
</p>
</desc>
<term>GSLogThread</term>
<desc>
<p>
Setting the user default <code>GSLogThread</code> to
<code>YES</code> will cause NSLog and debug output to
include the current thread in the logged message.<br />
This is useful for debugging multi-threaded applications.
</p>
</desc>
<term>GSMacOSXCompatible</term>
<desc>
<p>

View file

@ -167,6 +167,7 @@ typedef enum {
GSMacOSXCompatible, // General behavior flag.
GSOldStyleGeometry, // Control geometry string output.
GSLogSyslog, // Force logging to go to syslog.
GSLogThread, // Include thread ID in log message.
NSWriteOldStylePropertyLists, // Control PList output.
GSUserDefaultMaxFlag // End marker.
} GSUserDefaultFlagType;

View file

@ -621,7 +621,7 @@ _GSDebugAllocationListAll(void)
void
GSDebugAllocationRemove(Class c, id o)
{
(*_GSDebugAllocationRemoveFunc)(c,o);
(*_GSDebugAllocationRemoveFunc)(c,o);
}
void

View file

@ -35,6 +35,7 @@
#include "Foundation/NSLock.h"
#include "Foundation/NSAutoreleasePool.h"
#include "Foundation/NSData.h"
#include "Foundation/NSThread.h"
#ifdef HAVE_SYSLOG_H
#include <syslog.h>
@ -46,6 +47,8 @@
#include "GSPrivate.h"
extern NSThread *GSCurrentThread();
/**
* A variable holding the file descriptor to which NSLogv() messages are
* written by default. GNUstep initialises this to stderr.<br />
@ -211,6 +214,12 @@ NSLog (NSString* format, ...)
* ensuring that a newline is present at the end of the message.
* </p>
* <p>
* In GNUstep, the GSLogThread user default may be set to YES in
* order to instruct this function to include the internal ID of
* the mcurrent thread after the process ID. This can help you
* to track the behavior of a multi-threaded program.
* </p>
* <p>
* The resulting message is then passed to a handler function to
* perform actual output. Locking is performed around the call to
* the function actually writing the message out, to ensure that
@ -242,15 +251,38 @@ NSLogv (NSString* format, va_list args)
#ifdef HAVE_SYSLOG
if (GSUserDefaultsFlag(GSLogSyslog) == YES)
prefix = @"";
{
if (GSUserDefaultsFlag(GSLogThread) == YES)
{
prefix = [NSString stringWithFormat: @"[%08x] ", GSCurrentThread()];
}
else
{
prefix = @"";
}
}
else
#endif
prefix = [NSString
stringWithFormat: @"%@ %@[%d] ",
[[NSCalendarDate calendarDate]
descriptionWithCalendarFormat: @"%Y-%m-%d %H:%M:%S.%F"],
[[NSProcessInfo processInfo] processName],
pid];
{
if (GSUserDefaultsFlag(GSLogThread) == YES)
{
prefix = [NSString
stringWithFormat: @"%@ %@[%d,%08x] ",
[[NSCalendarDate calendarDate]
descriptionWithCalendarFormat: @"%Y-%m-%d %H:%M:%S.%F"],
[[NSProcessInfo processInfo] processName],
pid, GSCurrentThread()];
}
else
{
prefix = [NSString
stringWithFormat: @"%@ %@[%d] ",
[[NSCalendarDate calendarDate]
descriptionWithCalendarFormat: @"%Y-%m-%d %H:%M:%S.%F"],
[[NSProcessInfo processInfo] processName],
pid];
}
}
/* Check if there is already a newline at the end of the format */
if (![format hasSuffix: @"\n"])

View file

@ -121,6 +121,8 @@ static void updateCache(NSUserDefaults *self)
= [self boolForKey: @"GSOldStyleGeometry"];
flags[GSLogSyslog]
= [self boolForKey: @"GSLogSyslog"];
flags[GSLogThread]
= [self boolForKey: @"GSLogThread"];
flags[NSWriteOldStylePropertyLists]
= [self boolForKey: @"NSWriteOldStylePropertyLists"];
}