mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-11 15:06:14 +01:00
New header containing GTK_DEBUG-style debugging support for GLib.
* glib/gdebug.h: New header containing GTK_DEBUG-style debugging support for GLib. Currently only the fatal_warnings debug option exists. * glib/gmessages.c (g_log_msg_prefix_init): New one-shot function for parsing G_MESSAGES_PREFIXED. (_g_debug_init): New one-shot function for parsing G_DEBUG. (g_log_write_prefix): Use g_log_msg_prefix_init(). (g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init(). * glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h. * glib/Makefile.am (IGNORE_HFILES): Add gdebug.h. * glib/running.sgml: Document the G_DEBUG environment variable. * glib/tmpl/threads.sgml: Replace g_thread_wait() by g_thread_join() in two places.
This commit is contained in:
parent
470d428f1d
commit
642897a7f3
13
ChangeLog
13
ChangeLog
@ -1,3 +1,16 @@
|
||||
2002-02-21 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
* glib/gdebug.h: New header containing GTK_DEBUG-style debugging
|
||||
support for GLib. Currently only the fatal_warnings debug option exists.
|
||||
|
||||
* glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
|
||||
for parsing G_MESSAGES_PREFIXED.
|
||||
(_g_debug_init): New one-shot function for parsing G_DEBUG.
|
||||
(g_log_write_prefix): Use g_log_msg_prefix_init().
|
||||
(g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
|
||||
|
||||
* glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
|
||||
|
||||
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
|
||||
|
@ -1,3 +1,16 @@
|
||||
2002-02-21 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
* glib/gdebug.h: New header containing GTK_DEBUG-style debugging
|
||||
support for GLib. Currently only the fatal_warnings debug option exists.
|
||||
|
||||
* glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
|
||||
for parsing G_MESSAGES_PREFIXED.
|
||||
(_g_debug_init): New one-shot function for parsing G_DEBUG.
|
||||
(g_log_write_prefix): Use g_log_msg_prefix_init().
|
||||
(g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
|
||||
|
||||
* glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
|
||||
|
||||
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
|
||||
|
@ -1,3 +1,16 @@
|
||||
2002-02-21 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
* glib/gdebug.h: New header containing GTK_DEBUG-style debugging
|
||||
support for GLib. Currently only the fatal_warnings debug option exists.
|
||||
|
||||
* glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
|
||||
for parsing G_MESSAGES_PREFIXED.
|
||||
(_g_debug_init): New one-shot function for parsing G_DEBUG.
|
||||
(g_log_write_prefix): Use g_log_msg_prefix_init().
|
||||
(g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
|
||||
|
||||
* glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
|
||||
|
||||
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
|
||||
|
@ -1,3 +1,16 @@
|
||||
2002-02-21 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
* glib/gdebug.h: New header containing GTK_DEBUG-style debugging
|
||||
support for GLib. Currently only the fatal_warnings debug option exists.
|
||||
|
||||
* glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
|
||||
for parsing G_MESSAGES_PREFIXED.
|
||||
(_g_debug_init): New one-shot function for parsing G_DEBUG.
|
||||
(g_log_write_prefix): Use g_log_msg_prefix_init().
|
||||
(g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
|
||||
|
||||
* glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
|
||||
|
||||
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
|
||||
|
@ -1,3 +1,16 @@
|
||||
2002-02-21 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
* glib/gdebug.h: New header containing GTK_DEBUG-style debugging
|
||||
support for GLib. Currently only the fatal_warnings debug option exists.
|
||||
|
||||
* glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
|
||||
for parsing G_MESSAGES_PREFIXED.
|
||||
(_g_debug_init): New one-shot function for parsing G_DEBUG.
|
||||
(g_log_write_prefix): Use g_log_msg_prefix_init().
|
||||
(g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
|
||||
|
||||
* glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
|
||||
|
||||
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
|
||||
|
@ -1,3 +1,16 @@
|
||||
2002-02-21 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
* glib/gdebug.h: New header containing GTK_DEBUG-style debugging
|
||||
support for GLib. Currently only the fatal_warnings debug option exists.
|
||||
|
||||
* glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
|
||||
for parsing G_MESSAGES_PREFIXED.
|
||||
(_g_debug_init): New one-shot function for parsing G_DEBUG.
|
||||
(g_log_write_prefix): Use g_log_msg_prefix_init().
|
||||
(g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
|
||||
|
||||
* glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
|
||||
|
||||
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
|
||||
|
@ -1,3 +1,16 @@
|
||||
2002-02-21 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
* glib/gdebug.h: New header containing GTK_DEBUG-style debugging
|
||||
support for GLib. Currently only the fatal_warnings debug option exists.
|
||||
|
||||
* glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
|
||||
for parsing G_MESSAGES_PREFIXED.
|
||||
(_g_debug_init): New one-shot function for parsing G_DEBUG.
|
||||
(g_log_write_prefix): Use g_log_msg_prefix_init().
|
||||
(g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
|
||||
|
||||
* glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
|
||||
|
||||
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
|
||||
|
@ -1,3 +1,16 @@
|
||||
2002-02-21 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
* glib/gdebug.h: New header containing GTK_DEBUG-style debugging
|
||||
support for GLib. Currently only the fatal_warnings debug option exists.
|
||||
|
||||
* glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
|
||||
for parsing G_MESSAGES_PREFIXED.
|
||||
(_g_debug_init): New one-shot function for parsing G_DEBUG.
|
||||
(g_log_write_prefix): Use g_log_msg_prefix_init().
|
||||
(g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
|
||||
|
||||
* glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
|
||||
|
||||
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
|
||||
|
@ -1,3 +1,12 @@
|
||||
2002-02-21 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
* glib/Makefile.am (IGNORE_HFILES): Add gdebug.h.
|
||||
|
||||
* glib/running.sgml: Document the G_DEBUG environment variable.
|
||||
|
||||
* glib/tmpl/threads.sgml: Replace g_thread_wait() by
|
||||
g_thread_join() in two places.
|
||||
|
||||
2002-02-20 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* gobject/gobject-sections.txt
|
||||
|
@ -34,7 +34,8 @@ IGNORE_HFILES= \
|
||||
gunicomp.h \
|
||||
gunidecomp.h \
|
||||
gunichartables.h \
|
||||
glibconfig-sysdefs.h
|
||||
glibconfig-sysdefs.h \
|
||||
gdebug.h
|
||||
|
||||
# Extra files to add when scanning
|
||||
EXTRA_HFILES=
|
||||
|
@ -38,7 +38,27 @@ variables like <envar>LANG</envar>, <envar>PATH</envar> or <envar>HOME</envar>.
|
||||
<para>
|
||||
A list of log levels for which messages should be prefixed by the
|
||||
program name and PID of the application. The default is to prefix
|
||||
everything except %G_LOG_LEVEL_MESSAGE and %G_LOG_LEVEL_INFO.
|
||||
everything except <literal>G_LOG_LEVEL_MESSAGE</literal> and <literal>G_LOG_LEVEL_INFO</literal>.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><envar>G_DEBUG</envar></title>
|
||||
|
||||
<para>
|
||||
If GLib has been configured with <option>--enable-debug=yes</option>,
|
||||
this variable can be set to a list of debug options, which cause GLib
|
||||
to print out different types of debugging information.
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>fatal_warnings</term>
|
||||
<listitem><para>Causes GLib to abort the program at the first call
|
||||
to <link linkend="g-warning">g_warning</link>(). This option is
|
||||
special in that it doesn't require GLib to be configured with
|
||||
debugging support.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
@ -61,9 +81,9 @@ static volatile gulong g_trap_free_size;
|
||||
static volatile gulong g_trap_realloc_size;
|
||||
static volatile gulong g_trap_malloc_size;
|
||||
</programlisting>
|
||||
If set to a size > 0, <link linkend="g-free">g_free()</link>,
|
||||
<link linkend="g-realloc">g_realloc()</link> and
|
||||
<link linkend="g-malloc">g_malloc()</link> will be intercepted if the size
|
||||
If set to a size > 0, <link linkend="g-free">g_free</link>(),
|
||||
<link linkend="g-realloc">g_realloc</link>() and
|
||||
<link linkend="g-malloc">g_malloc</link>() will be intercepted if the size
|
||||
matches the size of the corresponding memory block. This will only work with
|
||||
<literal>g_mem_set_vtable (glib_mem_profiler_table)</literal> upon startup
|
||||
though, because memory profiling is required to match on the memory block sizes.
|
||||
|
@ -274,7 +274,7 @@ This function creates a new thread with the priority @priority.
|
||||
|
||||
<para>
|
||||
If @joinable is %TRUE, you can wait for this threads termination
|
||||
calling g_thread_wait(). Otherwise the thread will just disappear, when
|
||||
calling g_thread_join(). Otherwise the thread will just disappear, when
|
||||
ready.
|
||||
</para>
|
||||
|
||||
@ -304,7 +304,7 @@ platform, if @stack_size is 0.
|
||||
|
||||
<para>
|
||||
If @joinable is %TRUE, you can wait for this threads termination
|
||||
calling g_thread_wait(). Otherwise the thread will just disappear, when
|
||||
calling g_thread_join(). Otherwise the thread will just disappear, when
|
||||
ready. If @bound is %TRUE, this thread will be scheduled in the system
|
||||
scope, otherwise the implementation is free to do scheduling in the
|
||||
process scope. The first variant is more expensive resource-wise, but
|
||||
|
@ -81,7 +81,8 @@ libglib_1_3_la_SOURCES = \
|
||||
gunicomp.h \
|
||||
gunidecomp.h \
|
||||
gunidecomp.c \
|
||||
gutils.c
|
||||
gutils.c \
|
||||
gdebug.h
|
||||
|
||||
EXTRA_libglib_1_3_la_SOURCES = \
|
||||
giounix.c \
|
||||
|
63
glib/gdebug.h
Normal file
63
glib/gdebug.h
Normal file
@ -0,0 +1,63 @@
|
||||
/* GLIB - Library of useful routines for C programming
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GLib Team. See the ChangeLog
|
||||
* files for a list of changes. These files are distributed with
|
||||
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
|
||||
*/
|
||||
|
||||
#ifndef __G_DEBUG_H__
|
||||
#define __G_DEBUG_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
typedef enum {
|
||||
G_DEBUG_FATAL_WARNINGS = 1 << 0,
|
||||
} GDebugFlag;
|
||||
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
|
||||
#define G_NOTE(type, action) G_STMT_START { \
|
||||
if (!_g_debug_initialized) \
|
||||
{ _g_debug_init (); } \
|
||||
if (_g_debug_flags & G_DEBUG_##type) \
|
||||
{ action; }; } G_STMT_END
|
||||
|
||||
#else /* !G_ENABLE_DEBUG */
|
||||
|
||||
#define G_NOTE(type, action)
|
||||
|
||||
#endif /* G_ENABLE_DEBUG */
|
||||
|
||||
GLIB_VAR gboolean _g_debug_initialized;
|
||||
GLIB_VAR guint _g_debug_flags;
|
||||
|
||||
void _g_debug_init ();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
|
||||
#endif /* __G_DEBUG_H__ */
|
@ -43,6 +43,7 @@
|
||||
#include <signal.h>
|
||||
#include <locale.h>
|
||||
#include <errno.h>
|
||||
#include "gdebug.h"
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
typedef FILE* GFileDescriptor;
|
||||
@ -206,38 +207,40 @@ write_string (GFileDescriptor fd,
|
||||
write (fd, string, strlen (string));
|
||||
}
|
||||
|
||||
static GLogLevelFlags g_log_msg_prefix = G_LOG_LEVEL_ERROR | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_DEBUG;
|
||||
|
||||
static inline void
|
||||
g_log_msg_prefix_init ()
|
||||
{
|
||||
static gboolean initialized = FALSE;
|
||||
const gchar *val;
|
||||
|
||||
if (!initialized) {
|
||||
|
||||
initialized = TRUE;
|
||||
val = g_getenv ("G_MESSAGES_PREFIXED");
|
||||
|
||||
if (val)
|
||||
{
|
||||
static const GDebugKey keys[] = {
|
||||
{ "error", G_LOG_LEVEL_ERROR },
|
||||
{ "critical", G_LOG_LEVEL_CRITICAL },
|
||||
{ "warning", G_LOG_LEVEL_WARNING },
|
||||
{ "message", G_LOG_LEVEL_MESSAGE },
|
||||
{ "info", G_LOG_LEVEL_INFO },
|
||||
{ "debug", G_LOG_LEVEL_DEBUG }
|
||||
};
|
||||
|
||||
g_log_msg_prefix = g_parse_debug_string (val, keys, G_N_ELEMENTS (keys));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
g_log_write_prefix (GFileDescriptor fd,
|
||||
GLogLevelFlags mask)
|
||||
{
|
||||
static GLogLevelFlags g_log_msg_prefix = G_LOG_LEVEL_ERROR | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_DEBUG;
|
||||
static gboolean initialized = FALSE;
|
||||
|
||||
g_mutex_lock (g_messages_lock);
|
||||
|
||||
if (!initialized)
|
||||
{
|
||||
const gchar *val;
|
||||
initialized = TRUE;
|
||||
|
||||
val = g_getenv ("G_MESSAGES_PREFIXED");
|
||||
|
||||
if (val)
|
||||
{
|
||||
static const GDebugKey keys[] = {
|
||||
{ "error", G_LOG_LEVEL_ERROR },
|
||||
{ "critical", G_LOG_LEVEL_CRITICAL },
|
||||
{ "warning", G_LOG_LEVEL_WARNING },
|
||||
{ "message", G_LOG_LEVEL_MESSAGE },
|
||||
{ "info", G_LOG_LEVEL_INFO },
|
||||
{ "debug", G_LOG_LEVEL_DEBUG }
|
||||
};
|
||||
|
||||
g_log_msg_prefix = g_parse_debug_string (val, keys, G_N_ELEMENTS (keys));
|
||||
}
|
||||
}
|
||||
|
||||
g_mutex_unlock (g_messages_lock);
|
||||
g_log_msg_prefix_init ();
|
||||
|
||||
if ((g_log_msg_prefix & mask) == mask)
|
||||
{
|
||||
@ -504,6 +507,9 @@ g_logv (const gchar *log_domain,
|
||||
va_end (args2);
|
||||
#endif /* !HAVE_VSNPRINTF */
|
||||
|
||||
if (!_g_debug_initialized)
|
||||
_g_debug_init ();
|
||||
|
||||
for (i = g_bit_nth_msf (log_level, -1); i >= 0; i = g_bit_nth_msf (log_level, i))
|
||||
{
|
||||
register GLogLevelFlags test_level;
|
||||
@ -1186,6 +1192,37 @@ g_printf_string_upper_bound (const gchar *format,
|
||||
void
|
||||
g_messages_init (void)
|
||||
{
|
||||
g_messages_lock = g_mutex_new();
|
||||
g_log_depth = g_private_new(NULL);
|
||||
g_messages_lock = g_mutex_new ();
|
||||
g_log_depth = g_private_new (NULL);
|
||||
g_log_msg_prefix_init ();
|
||||
_g_debug_init ();
|
||||
}
|
||||
|
||||
gboolean _g_debug_initialized = FALSE;
|
||||
guint _g_debug_flags = 0;
|
||||
|
||||
void _g_debug_init ()
|
||||
{
|
||||
const gchar *val;
|
||||
|
||||
_g_debug_initialized = TRUE;
|
||||
|
||||
val = g_getenv ("G_DEBUG");
|
||||
if (val != NULL)
|
||||
{
|
||||
static const GDebugKey keys[] = {
|
||||
{"fatal_warnings", G_DEBUG_FATAL_WARNINGS}
|
||||
};
|
||||
|
||||
_g_debug_flags = g_parse_debug_string (val, keys, G_N_ELEMENTS (keys));
|
||||
}
|
||||
|
||||
if (_g_debug_flags & G_DEBUG_FATAL_WARNINGS)
|
||||
{
|
||||
GLogLevelFlags fatal_mask;
|
||||
|
||||
fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
|
||||
fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
|
||||
g_log_set_always_fatal (fatal_mask);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user