the value of ---enable_debug is written into glibconfig.h so everything is

Thu Feb 19 12:18:24 1998  Owen Taylor  <owt1@cornell.edu>

	* glib/configure.in glib/glibconfig.h.in: the value of
	---enable_debug is written into glibconfig.h so everything
	is recompiled when it changes. (HACK)

	* gtk/gtkmain.c gdk/gdk.c docs/debugging.txt:
	Added --gdk-no-debug and --gtk-no-debug switches. Effect
	of switches is no cumulative.
This commit is contained in:
Owen Taylor 1998-02-19 18:02:03 +00:00 committed by Owen Taylor
parent 2fbc8c20c1
commit 62dba86c81
7 changed files with 155 additions and 72 deletions

View File

@ -42,20 +42,31 @@ time by the --enable-debug option.
RUN TIME OPTIONS RUN TIME OPTIONS
---------------- ----------------
At run time, if GTK+ was compiled with debugging enabled, At run time, if GTK+ was compiled with debugging enabled, different
different types of debugging information can be printed types of debugging information can be printed out. This is controlled
out by setting the --gtk-debug and --gdk-debug command line by the:
options, or the GTK_DEBUG and GDK_DEBUG environment
variables. (The command line options override the environment
variables)
Each of these can either be the special value ALL, GTK_DEBUG and GDK_DEBUG environment variables
or a sequence of ':' separated options. (Note, case is --gtk-debug and --gdk-debug command line options
significant) --gtk-no-debug and --gdk-no-debug command line options
As noted below, some of these are useful in application First the environment variables are applied, then the command line
debugging, but most are only interested to those debugging options are applied in the order given on the command line.
the libraries
Each of these can either be the special value ALL, or a sequence of
':' separated options. (Note, case is significant). The environment
variables and the --gtk-debug and --gdk-debug options add debugging
options and the --gtk-no-debug and --gdk-no-debug options remove
them.
As noted below, some of these are useful in application debugging, but
most are only interested to those debugging the libraries
For instance:
GDK_DEBUG_FLAGS=misc:dnd testgtk --gdk-no-debug dnd --gdk-debug events
runs testgtk with the 'misc' and 'events' debugging options.
GTK_DEBUG GTK_DEBUG
--------- ---------
@ -81,3 +92,7 @@ the libraries
'color-context' - Information about the internal workings of 'color-context' - Information about the internal workings of
GdkColorContext GdkColorContext
'xim' - Information about X Input Method support 'xim' - Information about X Input Method support
- Owen Taylor <owt1@cornell.edu>
98/02/19

View File

@ -233,6 +233,9 @@ static GDebugKey gdk_debug_keys[] = {
{"color-context", GDK_DEBUG_COLOR_CONTEXT}, {"color-context", GDK_DEBUG_COLOR_CONTEXT},
{"xim", GDK_DEBUG_XIM} {"xim", GDK_DEBUG_XIM}
}; };
static const int gdk_ndebug_keys = sizeof(gdk_debug_keys)/sizeof(GDebugKey);
#endif /* G_ENABLE_DEBUG */ #endif /* G_ENABLE_DEBUG */
/* /*
@ -267,10 +270,6 @@ gdk_init (int *argc,
int argc_orig = *argc; int argc_orig = *argc;
char **argv_orig; char **argv_orig;
#ifdef G_ENABLE_DEBUG
gboolean debug_set = FALSE;
#endif /* G_ENABLE_DEBUG */
argv_orig = malloc ((argc_orig + 1) * sizeof (char*)); argv_orig = malloc ((argc_orig + 1) * sizeof (char*));
for (i = 0; i < argc_orig; i++) for (i = 0; i < argc_orig; i++)
argv_orig[i] = g_strdup ((*argv)[i]); argv_orig[i] = g_strdup ((*argv)[i]);
@ -295,6 +294,16 @@ gdk_init (int *argc,
synchronize = FALSE; synchronize = FALSE;
#ifdef G_ENABLE_DEBUG
{
gchar *debug_string = getenv("GDK_DEBUG");
if (debug_string != NULL)
gdk_debug_flags = g_parse_debug_string (debug_string,
gdk_debug_keys,
gdk_ndebug_keys);
}
#endif /* G_ENABLE_DEBUG */
if (argc && argv) if (argc && argv)
{ {
if (*argc > 0) if (*argc > 0)
@ -303,7 +312,10 @@ gdk_init (int *argc,
for (i = 1; i < *argc;) for (i = 1; i < *argc;)
{ {
if ((*argv)[i] == NULL) if ((*argv)[i] == NULL)
continue; {
i += 1;
continue;
}
#ifdef G_ENABLE_DEBUG #ifdef G_ENABLE_DEBUG
if (strcmp ("--gdk-debug", (*argv)[i]) == 0) if (strcmp ("--gdk-debug", (*argv)[i]) == 0)
@ -312,15 +324,27 @@ gdk_init (int *argc,
if ((i + 1) < *argc && (*argv)[i + 1]) if ((i + 1) < *argc && (*argv)[i + 1])
{ {
gdk_debug_flags = g_parse_debug_string ((*argv)[i+1], gdk_debug_flags |= g_parse_debug_string ((*argv)[i+1],
gdk_debug_keys, gdk_debug_keys,
sizeof(gdk_debug_keys) / sizeof(GDebugKey)); gdk_ndebug_keys);
debug_set = TRUE;
(*argv)[i + 1] = NULL; (*argv)[i + 1] = NULL;
i += 1; i += 1;
} }
} }
#endif G_ENABLE_DEBUG else if (strcmp ("--gdk-no-debug", (*argv)[i]) == 0)
{
(*argv)[i] = NULL;
if ((i + 1) < *argc && (*argv)[i + 1])
{
gdk_debug_flags &= ~g_parse_debug_string ((*argv)[i+1],
gdk_debug_keys,
gdk_ndebug_keys);
(*argv)[i + 1] = NULL;
i += 1;
}
}
#endif /* G_ENABLE_DEBUG */
else if (strcmp ("--display", (*argv)[i]) == 0) else if (strcmp ("--display", (*argv)[i]) == 0)
{ {
(*argv)[i] = NULL; (*argv)[i] = NULL;
@ -438,17 +462,6 @@ gdk_init (int *argc,
gdk_progname = "<unknown>"; gdk_progname = "<unknown>";
} }
#ifdef G_ENABLE_DEBUG
if (!debug_set)
{
gchar *debug_string = getenv("GDK_DEBUG");
if (debug_string != NULL)
gdk_debug_flags = g_parse_debug_string (debug_string,
gdk_debug_keys,
sizeof(gdk_debug_keys) / sizeof(GDebugKey));
}
#endif /* G_ENABLE_DEBUG */
gdk_display = XOpenDisplay (gdk_display_name); gdk_display = XOpenDisplay (gdk_display_name);
if (!gdk_display) if (!gdk_display)
{ {
@ -2180,12 +2193,14 @@ gdk_event_translate (GdkEvent *event,
break; break;
} }
#ifdef G_ENABLE_DEBUG
if ((gdk_debug_flags & GDK_DEBUG_DND) & dnd_drag_perhaps) if ((gdk_debug_flags & GDK_DEBUG_DND) & dnd_drag_perhaps)
{ {
g_print("We may[%d] have a drag into %#lx = %#lx\n", g_print("We may[%d] have a drag into %#lx = %#lx\n",
gdk_dnd.drag_really, gdk_dnd.drag_really,
xevent->xcrossing.window, real_sw->xwindow); xevent->xcrossing.window, real_sw->xwindow);
} }
#endif /* G_ENABLE_DEBUG */
if (dnd_drag_perhaps && gdk_dnd.drag_really && if (dnd_drag_perhaps && gdk_dnd.drag_really &&
(xevent->xcrossing.window == real_sw->xwindow)) (xevent->xcrossing.window == real_sw->xwindow))
@ -2247,12 +2262,14 @@ gdk_event_translate (GdkEvent *event,
event->crossing.detail = GDK_NOTIFY_UNKNOWN; event->crossing.detail = GDK_NOTIFY_UNKNOWN;
break; break;
} }
#ifdef G_ENABLE_DEBUG
if ((gdk_debug_flags & GDK_DEBUG_DND) & dnd_drag_perhaps) if ((gdk_debug_flags & GDK_DEBUG_DND) & dnd_drag_perhaps)
{ {
g_print("We may[%d] have a drag out of %#lx = %#lx\n", g_print("We may[%d] have a drag out of %#lx = %#lx\n",
gdk_dnd.drag_really, gdk_dnd.drag_really,
xevent->xcrossing.window, real_sw->xwindow); xevent->xcrossing.window, real_sw->xwindow);
} }
#endif /* G_ENABLE_DEBUG */
if (dnd_drag_perhaps && !gdk_dnd.drag_really && if (dnd_drag_perhaps && !gdk_dnd.drag_really &&
(xevent->xcrossing.window == real_sw->xwindow)) (xevent->xcrossing.window == real_sw->xwindow))
{ {
@ -2361,6 +2378,7 @@ gdk_event_translate (GdkEvent *event,
case VisibilityNotify: case VisibilityNotify:
/* Print debugging info. /* Print debugging info.
*/ */
#ifdef G_ENABLE_DEBUG
if (gdk_debug_flags & GDK_DEBUG_EVENTS) if (gdk_debug_flags & GDK_DEBUG_EVENTS)
switch (xevent->xvisibility.state) switch (xevent->xvisibility.state)
{ {
@ -2377,6 +2395,7 @@ gdk_event_translate (GdkEvent *event,
xevent->xvisibility.window - base_id); xevent->xvisibility.window - base_id);
break; break;
} }
#endif /* G_ENABLE_DEBUG */
event->visibility.type = GDK_VISIBILITY_NOTIFY; event->visibility.type = GDK_VISIBILITY_NOTIFY;
event->visibility.window = window; event->visibility.window = window;
@ -3552,10 +3571,12 @@ gdk_ic_cleanup (void)
destroyed++; destroyed++;
} }
} }
#ifdef G_ENABLE_DEBUG
if ((gdk_debug_flags & GDK_DEBUG_XIM) && destroyed > 0) if ((gdk_debug_flags & GDK_DEBUG_XIM) && destroyed > 0)
{ {
g_warning ("Cleaned up %i IC(s)\n", destroyed); g_warning ("Cleaned up %i IC(s)\n", destroyed);
} }
#endif /* G_ENABLE_DEBUG */
g_list_free(xim_ic_list); g_list_free(xim_ic_list);
xim_ic_list = NULL; xim_ic_list = NULL;
} }

View File

@ -233,6 +233,9 @@ static GDebugKey gdk_debug_keys[] = {
{"color-context", GDK_DEBUG_COLOR_CONTEXT}, {"color-context", GDK_DEBUG_COLOR_CONTEXT},
{"xim", GDK_DEBUG_XIM} {"xim", GDK_DEBUG_XIM}
}; };
static const int gdk_ndebug_keys = sizeof(gdk_debug_keys)/sizeof(GDebugKey);
#endif /* G_ENABLE_DEBUG */ #endif /* G_ENABLE_DEBUG */
/* /*
@ -267,10 +270,6 @@ gdk_init (int *argc,
int argc_orig = *argc; int argc_orig = *argc;
char **argv_orig; char **argv_orig;
#ifdef G_ENABLE_DEBUG
gboolean debug_set = FALSE;
#endif /* G_ENABLE_DEBUG */
argv_orig = malloc ((argc_orig + 1) * sizeof (char*)); argv_orig = malloc ((argc_orig + 1) * sizeof (char*));
for (i = 0; i < argc_orig; i++) for (i = 0; i < argc_orig; i++)
argv_orig[i] = g_strdup ((*argv)[i]); argv_orig[i] = g_strdup ((*argv)[i]);
@ -295,6 +294,16 @@ gdk_init (int *argc,
synchronize = FALSE; synchronize = FALSE;
#ifdef G_ENABLE_DEBUG
{
gchar *debug_string = getenv("GDK_DEBUG");
if (debug_string != NULL)
gdk_debug_flags = g_parse_debug_string (debug_string,
gdk_debug_keys,
gdk_ndebug_keys);
}
#endif /* G_ENABLE_DEBUG */
if (argc && argv) if (argc && argv)
{ {
if (*argc > 0) if (*argc > 0)
@ -303,7 +312,10 @@ gdk_init (int *argc,
for (i = 1; i < *argc;) for (i = 1; i < *argc;)
{ {
if ((*argv)[i] == NULL) if ((*argv)[i] == NULL)
continue; {
i += 1;
continue;
}
#ifdef G_ENABLE_DEBUG #ifdef G_ENABLE_DEBUG
if (strcmp ("--gdk-debug", (*argv)[i]) == 0) if (strcmp ("--gdk-debug", (*argv)[i]) == 0)
@ -312,15 +324,27 @@ gdk_init (int *argc,
if ((i + 1) < *argc && (*argv)[i + 1]) if ((i + 1) < *argc && (*argv)[i + 1])
{ {
gdk_debug_flags = g_parse_debug_string ((*argv)[i+1], gdk_debug_flags |= g_parse_debug_string ((*argv)[i+1],
gdk_debug_keys, gdk_debug_keys,
sizeof(gdk_debug_keys) / sizeof(GDebugKey)); gdk_ndebug_keys);
debug_set = TRUE;
(*argv)[i + 1] = NULL; (*argv)[i + 1] = NULL;
i += 1; i += 1;
} }
} }
#endif G_ENABLE_DEBUG else if (strcmp ("--gdk-no-debug", (*argv)[i]) == 0)
{
(*argv)[i] = NULL;
if ((i + 1) < *argc && (*argv)[i + 1])
{
gdk_debug_flags &= ~g_parse_debug_string ((*argv)[i+1],
gdk_debug_keys,
gdk_ndebug_keys);
(*argv)[i + 1] = NULL;
i += 1;
}
}
#endif /* G_ENABLE_DEBUG */
else if (strcmp ("--display", (*argv)[i]) == 0) else if (strcmp ("--display", (*argv)[i]) == 0)
{ {
(*argv)[i] = NULL; (*argv)[i] = NULL;
@ -438,17 +462,6 @@ gdk_init (int *argc,
gdk_progname = "<unknown>"; gdk_progname = "<unknown>";
} }
#ifdef G_ENABLE_DEBUG
if (!debug_set)
{
gchar *debug_string = getenv("GDK_DEBUG");
if (debug_string != NULL)
gdk_debug_flags = g_parse_debug_string (debug_string,
gdk_debug_keys,
sizeof(gdk_debug_keys) / sizeof(GDebugKey));
}
#endif /* G_ENABLE_DEBUG */
gdk_display = XOpenDisplay (gdk_display_name); gdk_display = XOpenDisplay (gdk_display_name);
if (!gdk_display) if (!gdk_display)
{ {
@ -2180,12 +2193,14 @@ gdk_event_translate (GdkEvent *event,
break; break;
} }
#ifdef G_ENABLE_DEBUG
if ((gdk_debug_flags & GDK_DEBUG_DND) & dnd_drag_perhaps) if ((gdk_debug_flags & GDK_DEBUG_DND) & dnd_drag_perhaps)
{ {
g_print("We may[%d] have a drag into %#lx = %#lx\n", g_print("We may[%d] have a drag into %#lx = %#lx\n",
gdk_dnd.drag_really, gdk_dnd.drag_really,
xevent->xcrossing.window, real_sw->xwindow); xevent->xcrossing.window, real_sw->xwindow);
} }
#endif /* G_ENABLE_DEBUG */
if (dnd_drag_perhaps && gdk_dnd.drag_really && if (dnd_drag_perhaps && gdk_dnd.drag_really &&
(xevent->xcrossing.window == real_sw->xwindow)) (xevent->xcrossing.window == real_sw->xwindow))
@ -2247,12 +2262,14 @@ gdk_event_translate (GdkEvent *event,
event->crossing.detail = GDK_NOTIFY_UNKNOWN; event->crossing.detail = GDK_NOTIFY_UNKNOWN;
break; break;
} }
#ifdef G_ENABLE_DEBUG
if ((gdk_debug_flags & GDK_DEBUG_DND) & dnd_drag_perhaps) if ((gdk_debug_flags & GDK_DEBUG_DND) & dnd_drag_perhaps)
{ {
g_print("We may[%d] have a drag out of %#lx = %#lx\n", g_print("We may[%d] have a drag out of %#lx = %#lx\n",
gdk_dnd.drag_really, gdk_dnd.drag_really,
xevent->xcrossing.window, real_sw->xwindow); xevent->xcrossing.window, real_sw->xwindow);
} }
#endif /* G_ENABLE_DEBUG */
if (dnd_drag_perhaps && !gdk_dnd.drag_really && if (dnd_drag_perhaps && !gdk_dnd.drag_really &&
(xevent->xcrossing.window == real_sw->xwindow)) (xevent->xcrossing.window == real_sw->xwindow))
{ {
@ -2361,6 +2378,7 @@ gdk_event_translate (GdkEvent *event,
case VisibilityNotify: case VisibilityNotify:
/* Print debugging info. /* Print debugging info.
*/ */
#ifdef G_ENABLE_DEBUG
if (gdk_debug_flags & GDK_DEBUG_EVENTS) if (gdk_debug_flags & GDK_DEBUG_EVENTS)
switch (xevent->xvisibility.state) switch (xevent->xvisibility.state)
{ {
@ -2377,6 +2395,7 @@ gdk_event_translate (GdkEvent *event,
xevent->xvisibility.window - base_id); xevent->xvisibility.window - base_id);
break; break;
} }
#endif /* G_ENABLE_DEBUG */
event->visibility.type = GDK_VISIBILITY_NOTIFY; event->visibility.type = GDK_VISIBILITY_NOTIFY;
event->visibility.window = window; event->visibility.window = window;
@ -3552,10 +3571,12 @@ gdk_ic_cleanup (void)
destroyed++; destroyed++;
} }
} }
#ifdef G_ENABLE_DEBUG
if ((gdk_debug_flags & GDK_DEBUG_XIM) && destroyed > 0) if ((gdk_debug_flags & GDK_DEBUG_XIM) && destroyed > 0)
{ {
g_warning ("Cleaned up %i IC(s)\n", destroyed); g_warning ("Cleaned up %i IC(s)\n", destroyed);
} }
#endif /* G_ENABLE_DEBUG */
g_list_free(xim_ic_list); g_list_free(xim_ic_list);
xim_ic_list = NULL; xim_ic_list = NULL;
} }

View File

@ -32,6 +32,7 @@
/* Other stuff */ /* Other stuff */
#undef G_COMPILED_WITH_DEBUGGING
#undef HAVE_BROKEN_WCTYPE #undef HAVE_BROKEN_WCTYPE
#undef HAVE_DOPRNT #undef HAVE_DOPRNT
#undef HAVE_FLOAT_H #undef HAVE_FLOAT_H

View File

@ -32,6 +32,8 @@ else
fi fi
fi fi
AC_DEFINE_UNQUOTED(G_COMPILED_WITH_DEBUGGING, "${enable_debug}")
# Checks for programs. # Checks for programs.
AC_PROG_CC AC_PROG_CC
AM_PROG_CC_STDC AM_PROG_CC_STDC

View File

@ -3,6 +3,9 @@
/* Define to empty if the keyword does not work. */ /* Define to empty if the keyword does not work. */
#undef const #undef const
/* Force recompilation when --enable-debug value changes */
#undef G_COMPILED_WITH_DEBUGGING
/* Define if you don't have vprintf but do have _doprnt. */ /* Define if you don't have vprintf but do have _doprnt. */
#undef HAVE_DOPRNT #undef HAVE_DOPRNT

View File

@ -141,22 +141,24 @@ static GdkColormap *gtk_colormap; /* The colormap to be used in creating new
* widgets. * widgets.
*/ */
guint gtk_debug_flags; /* Global GTK debug flag */ guint gtk_debug_flags = 0; /* Global GTK debug flag */
#ifdef G_ENABLE_DEBUG #ifdef G_ENABLE_DEBUG
static GDebugKey gtk_debug_keys[] = { static GDebugKey gtk_debug_keys[] = {
{"objects", GTK_DEBUG_OBJECTS} {"objects", GTK_DEBUG_OBJECTS}
}; };
static const int gtk_ndebug_keys = sizeof(gtk_debug_keys)/sizeof(GDebugKey);
#endif /* G_ENABLE_DEBUG */ #endif /* G_ENABLE_DEBUG */
void void
gtk_init (int *argc, gtk_init (int *argc,
char ***argv) char ***argv)
{ {
#ifdef G_ENABLE_DEBUG
gboolean debug_set = FALSE;
#endif
if (0) if (0)
{ {
g_set_error_handler (gtk_error); g_set_error_handler (gtk_error);
@ -171,22 +173,48 @@ gtk_init (int *argc,
gdk_init (argc, argv); gdk_init (argc, argv);
#ifdef G_ENABLE_DEBUG #ifdef G_ENABLE_DEBUG
{
gchar *debug_string = getenv("GTK_DEBUG");
if (debug_string != NULL)
gtk_debug_flags = g_parse_debug_string (debug_string,
gtk_debug_keys,
gtk_ndebug_keys);
}
if (argc && argv) if (argc && argv)
{ {
gint i; gint i;
for (i = 1; i < *argc;) for (i = 1; i < *argc;)
{ {
if ((*argv[i]) && strcmp ("--gtk-debug", (*argv)[i]) == 0) if ((*argv)[i] == NULL)
{
i += 1;
continue;
}
if (strcmp ("--gtk-debug", (*argv)[i]) == 0)
{ {
(*argv)[i] = NULL; (*argv)[i] = NULL;
if ((i + 1) < *argc && (*argv)[i + 1]) if ((i + 1) < *argc && (*argv)[i + 1])
{ {
gtk_debug_flags = g_parse_debug_string ((*argv)[i+1], gtk_debug_flags |= g_parse_debug_string ((*argv)[i+1],
gtk_debug_keys, gtk_debug_keys,
sizeof(gtk_debug_keys) / sizeof(GDebugKey)); gtk_ndebug_keys);
debug_set = TRUE; (*argv)[i + 1] = NULL;
i += 1;
}
}
else if (strcmp ("--gtk-no-debug", (*argv)[i]) == 0)
{
(*argv)[i] = NULL;
if ((i + 1) < *argc && (*argv)[i + 1])
{
gtk_debug_flags &= ~g_parse_debug_string ((*argv)[i+1],
gtk_debug_keys,
gtk_ndebug_keys);
(*argv)[i + 1] = NULL; (*argv)[i + 1] = NULL;
i += 1; i += 1;
} }
@ -195,14 +223,6 @@ gtk_init (int *argc,
} }
} }
if (!debug_set)
{
gchar *debug_string = getenv("GTK_DEBUG");
if (debug_string != NULL)
gtk_debug_flags = g_parse_debug_string (debug_string,
gtk_debug_keys,
sizeof(gtk_debug_keys) / sizeof(GDebugKey));
}
#endif /* G_ENABLE_DEBUG */ #endif /* G_ENABLE_DEBUG */
/* Initialize the default visual and colormap to be /* Initialize the default visual and colormap to be