<?xml version="1.0"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
               "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
]>
<refentry id="glib-running">
<refmeta>
<refentrytitle>Running GLib Applications</refentrytitle>
<manvolnum>3</manvolnum>
<refmiscinfo>GLib Library</refmiscinfo>
</refmeta>

<refnamediv>
<refname>Running GLib Applications</refname>
<refpurpose>
How to run and debug your GLib application
</refpurpose>
</refnamediv>

<refsect1>
<title>Running and debugging GLib Applications</title>

<refsect2>
<title>Environment variables</title>

<para>
  The runtime behaviour of GLib applications can be influenced by a
  number of environment variables.
</para>

<formalpara>
  <title>Standard variables</title>

  <para>
    GLib reads standard environment variables like <envar>LANG</envar>,
    <envar>PATH</envar>, <envar>HOME</envar>, <envar>TMPDIR</envar>,
    <envar>TZ</envar> and <envar>LOGNAME</envar>.
  </para>
</formalpara>

<formalpara>
  <title>XDG directories</title>

  <para>
    GLib consults the environment variables <envar>XDG_DATA_HOME</envar>,
    <envar>XDG_DATA_DIRS</envar>, <envar>XDG_CONFIG_HOME</envar>,
    <envar>XDG_CONFIG_DIRS</envar>, <envar>XDG_CACHE_HOME</envar> and
    <envar>XDG_RUNTIME_DIR</envar> for the various XDG directories.
    For more information, see the <ulink url="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG basedir spec</ulink>.
  </para>
</formalpara>

<formalpara id="G_FILENAME_ENCODING">
  <title><envar>G_FILENAME_ENCODING</envar></title>

  <para>
    This environment variable can be set to a comma-separated list of character
    set names. GLib assumes that filenames are encoded in the first character
    set from that list rather than in UTF-8. The special token "@locale" can be
    used to specify the character set for the current locale.
  </para>
</formalpara>

<formalpara id="G_BROKEN_FILENAMES">
  <title><envar>G_BROKEN_FILENAMES</envar></title>

  <para>
    If this environment variable is set, GLib assumes that filenames are in
    the locale encoding rather than in UTF-8. G_FILENAME_ENCODING takes
    priority over G_BROKEN_FILENAMES.
  </para>
</formalpara>

<formalpara id="G_MESSAGES_PREFIXED">
  <title><envar>G_MESSAGES_PREFIXED</envar></title>

  <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 <literal>G_LOG_LEVEL_MESSAGE</literal> and
    <literal>G_LOG_LEVEL_INFO</literal>.
    The possible values are
    <literal>error</literal>,
    <literal>warning</literal>,
    <literal>critical</literal>,
    <literal>message</literal>,
    <literal>info</literal> and
    <literal>debug</literal>.
    You can also use the special values
    <literal>all</literal> and
    <literal>help</literal>.
  </para>
  <para>
    This environment variable only affects the default log handler,
    g_log_default_handler().
  </para>
</formalpara>

<formalpara id="G_MESSAGES_DEBUG">
  <title><envar>G_MESSAGES_DEBUG</envar></title>

  <para>
    A space-separated list of log domains for which informational
    and debug messages should be printed. By default, these
    messages are not printed.
  </para>
  <para>
    You can also use the special value <literal>all</literal>.
  </para>
  <para>
    This environment variable only affects the default log handler,
    g_log_default_handler().
  </para>
</formalpara>

<formalpara id="G-DEBUG:CAPS">
  <title><envar>G_DEBUG</envar></title>

  <para>
    This environment 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 g_warning() or g_critical().  Use of this flag is not
           recommended except when debugging.</para>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term>fatal-criticals</term>
        <listitem><para>Causes GLib to abort the program at the first call
           to g_critical().  This flag can be useful during debugging and
           testing.</para>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term>gc-friendly</term>
        <listitem><para>Newly allocated memory that isn't directly initialized,
          as well as memory being freed will be reset to 0. The point here is
          to allow memory checkers and similar programs that use Boehm GC alike
          algorithms to produce more accurate results.</para>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term>resident-modules</term>
        <listitem><para>All modules loaded by GModule will be made resident.
          This can be useful for tracking memory leaks in modules which are
          later unloaded; but it can also hide bugs where code is accessed
          after the module would have normally been unloaded.</para>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term>bind-now-modules</term>
        <listitem><para>All modules loaded by GModule will bind their symbols
          at load time, even when the code uses %G_MODULE_BIND_LAZY.</para>
        </listitem>
      </varlistentry>
    </variablelist>
    The special value <literal>all</literal> can be used to turn on all debug options.
    The special value <literal>help</literal> can be used to print all available options.
  </para>
</formalpara>

<formalpara id="G_SLICE">
  <title><envar>G_SLICE</envar></title>

  <para>
    This environment variable allows reconfiguration of the GSlice
    memory allocator.
    <variablelist>
      <varlistentry>
        <term>always-malloc</term>
        <listitem><para>This will cause all slices allocated through
          g_slice_alloc() and released by g_slice_free1() to be actually
          allocated via direct calls to g_malloc() and g_free().
          This is most useful for memory checkers and similar programs that
          use Boehm GC alike algorithms to produce more accurate results.
          It can also be in conjunction with debugging features of the system's
          malloc() implementation such as glibc's MALLOC_CHECK_=2 to debug
          erroneous slice allocation code, although
          <literal>debug-blocks</literal> is usually a better suited debugging
          tool.</para>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term>debug-blocks</term>
        <listitem><para>Using this option (present since GLib 2.13) engages
          extra code which performs sanity checks on the released memory
          slices. Invalid slice addresses or slice sizes will be reported and
          lead to a program halt. This option is for debugging scenarios.
          In particular, client packages sporting their own test suite should
          <emphasis>always enable this option when running tests</emphasis>.
          Global slice validation is ensured by storing size and address
          information for each allocated chunk, and maintaining a global
          hash table of that data. That way, multi-thread scalability is
          given up, and memory consumption is increased. However, the
          resulting code usually performs acceptably well, possibly better
          than with comparable memory checking carried out using external
          tools.</para>
          <para>An example of a memory corruption scenario that cannot be
          reproduced with <literal>G_SLICE=always-malloc</literal>, but will
          be caught by <literal>G_SLICE=debug-blocks</literal> is as follows:
          <programlisting>
            void *slist = g_slist_alloc (); /* void* gives up type-safety */
            g_list_free (slist);            /* corruption: sizeof (GSList) != sizeof (GList) */
          </programlisting></para>
        </listitem>
      </varlistentry>
    </variablelist>
    The special value <literal>all</literal> can be used to turn on all options.
    The special value <literal>help</literal> can be used to print all available options.
  </para>
</formalpara>

<formalpara id="G_RANDOM_VERSION">
  <title><envar>G_RANDOM_VERSION</envar></title>

  <para>
    If this environment variable is set to '2.0', the outdated
    pseudo-random number seeding and generation algorithms from
    GLib 2.0 are used instead of the newer, better ones. You should
    only set this variable if you have sequences of numbers that were
    generated with Glib 2.0 that you need to reproduce exactly.
  </para>
</formalpara>

<formalpara id="LIBCHARSET_ALIAS_DIR">
  <title><envar>LIBCHARSET_ALIAS_DIR</envar></title>

  <para>
    Allows to specify a nonstandard location for the
    <filename>charset.aliases</filename> file that is used by the
    character set conversion routines. The default location is the
    <replaceable>libdir</replaceable> specified at compilation time.
  </para>
</formalpara>

<formalpara id="TZDIR">
  <title><envar>TZDIR</envar></title>

  <para>
    Allows to specify a nonstandard location for the timezone data files
    that are used by the #GDateTime API. The default location is under
    <filename>/usr/share/zoneinfo</filename>. For more information,
    also look at the <command>tzset</command> manual page.
  </para>
</formalpara>

<formalpara id="G_ENABLE_DIAGNOSTIC">
  <title><envar>G_ENABLE_DIAGNOSTIC</envar></title>

  <para>
    If set to a non-zero value, this environment variable enables
    diagnostic messages, like deprecation messages for GObject properties
    and signals.
  </para>
</formalpara>

<formalpara id="G_DEBUGGER">
  <title><envar>G_DEBUGGER</envar></title>

  <para>
    When running on Windows, if set to a non-empty string, GLib will
    try to interpret the contents of this environment variable as
    a command line to a debugger, and run it if the process crashes.
    The debugger command line should contain <literal>%p</literal> and <literal>%e</literal> substitution
    tokens, which GLib will replace with the process ID of the crashing
    process and a handle to an event that the debugger should signal
    to let GLib know that the debugger successfully attached to the
    process. If <literal>%e</literal> is absent, or if the debugger is not able to
    signal events, GLib will resume execution after 60 seconds.
    If <literal>%p</literal> is absent, the debugger won't know which process to attach to,
    and GLib will also resume execution after 60 seconds.
  </para>
  <para>
    Additionally, even if <envar>G_DEBUGGER</envar> is not set, GLib would still
    try to print basic exception information (code and address) into
    stderr.
  </para>
  <para>
    By default the debugger gets a new console allocated for it.
    Set the <envar>G_DEBUGGER_OLD_CONSOLE</envar> environment variable to any
    non-empty string to make the debugger inherit the console of
    the crashing process. Normally this is only used by the GLib
    testsuite.
  </para>
  <para>
    The exception handler is written with the aim of making it as
    simple as possible, to minimize the risk of it invoking
    buggy functions or running buggy code, which would result
    in exceptions being raised recursively. Because of that
    it lacks most of the amenities that one would expect of GLib.
    Namely, it does not support Unicode, so it is highly advisable
    to only use ASCII characters in <envar>G_DEBUGGER</envar>.
  </para>
  <para>
    See also <link linkend="G_VEH_CATCH"><envar>G_VEH_CATCH</envar></link>.
  </para>
</formalpara>

<formalpara id="G_VEH_CATCH">
  <title><envar>G_VEH_CATCH</envar></title>

  <para>
    Catching some exceptions can break the program, since Windows
    will sometimes use exceptions for execution flow control and
    other purposes other than signalling a crash.
  </para>
  <para>
    The <envar>G_VEH_CATCH</envar> environment variable augments
    <ulink url="https://docs.microsoft.com/en-us/windows/desktop/debug/vectored-exception-handling">Vectored Exception Handling</ulink>
    on Windows (see <link linkend="G_DEBUGGER"><envar>G_DEBUGGER</envar></link>), allowing GLib to catch more
    exceptions. Set this variable to a comma-separated list of
    hexadecimal exception codes that should additionally be caught.
  </para>
  <para>
    By default GLib will only catch Access Violation, Stack Overflow and
    Illegal Instruction <ulink url="https://docs.microsoft.com/en-us/windows/desktop/api/winnt/ns-winnt-_exception_record">exceptions</ulink>.
  </para>
</formalpara>

</refsect2>

<refsect2 id="setlocale">
<title>Locale</title>

<para>
A number of interfaces in GLib depend on the current locale in which
an application is running. Therefore, most GLib-using applications should
call <function>setlocale (LC_ALL, "")</function> to set up the current
locale.
</para>

<para>
On Windows, in a C program there are several locale concepts
that not necessarily are synchronized. On one hand, there is the
system default ANSI code-page, which determines what encoding is used
for file names handled by the C library's functions and the Win32
API. (We are talking about the "narrow" functions here that take
character pointers, not the "wide" ones.)
</para>

<para>
On the other hand, there is the C library's current locale. The
character set (code-page) used by that is not necessarily the same as
the system default ANSI code-page. Strings in this character set are
returned by functions like <function>strftime()</function>.
</para>

</refsect2>

<para>
GLib ships with a set of Python macros for the GDB debugger. These includes pretty
printers for lists, hashtables and GObject types. It also has a backtrace filter
that makes backtraces with signal emissions easier to read.
</para>

<para>
To use this you need a version of GDB that supports Python scripting; anything
from 7.0 should be fine. You then need to install GLib in the same prefix as
GDB so that the Python GDB autoloaded files get installed in the right place
for GDB to pick up.
</para>

<para>
General pretty printing should just happen without having to do anything special.
To get the signal emission filtered backtrace you must use the "new-backtrace" command
instead of the standard one.
</para>

<para>
There is also a new command called gforeach that can be used to apply a command
on each item in a list. E.g. you can do
<programlisting>
gforeach i in some_list_variable: print *(GtkWidget *)l
</programlisting>
Which would print the contents of each widget in a list of widgets.
</para>

<refsect2>
<title>SystemTap</title>

<para>
<ulink url="http://sourceware.org/systemtap/">SystemTap</ulink> is a dynamic whole-system
analysis toolkit.  GLib ships with a file <filename>libglib-2.0.so.*.stp</filename> which defines a
set of probe points, which you can hook into with custom SystemTap scripts.
See the files <filename>libglib-2.0.so.*.stp</filename>, <filename>libgobject-2.0.so.*.stp</filename>
and <filename>libgio-2.0.so.*.stp</filename> which
are in your shared SystemTap scripts directory.
</para>

</refsect2>

<refsect2>
<title>Memory statistics</title>

<para>
g_mem_profile() will output a summary g_malloc() memory usage, if memory
profiling has been enabled by calling
<literal>g_mem_set_vtable (glib_mem_profiler_table)</literal> upon startup.
</para>

<para>
If GLib has been configured with <option>--enable-debug=yes</option>,
then g_slice_debug_tree_statistics() can be called in a debugger to
output details about the memory usage of the slice allocator.
</para>

</refsect2>
</refsect1>
</refentry>
