| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| <title>Running GLib Applications: GLib Reference Manual</title> |
| <meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> |
| <link rel="home" href="index.html" title="GLib Reference Manual"> |
| <link rel="up" href="glib.html" title="GLib Overview"> |
| <link rel="prev" href="glib-compiling.html" title="Compiling GLib Applications"> |
| <link rel="next" href="glib-changes.html" title="Changes to GLib"> |
| <meta name="generator" content="GTK-Doc V1.25.1 (XML mode)"> |
| <link rel="stylesheet" href="style.css" type="text/css"> |
| </head> |
| <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> |
| <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle"> |
| <td width="100%" align="left" class="shortcuts"></td> |
| <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> |
| <td><a accesskey="u" href="glib.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td> |
| <td><a accesskey="p" href="glib-compiling.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td> |
| <td><a accesskey="n" href="glib-changes.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td> |
| </tr></table> |
| <div class="refentry"> |
| <a name="glib-running"></a><div class="titlepage"></div> |
| <div class="refnamediv"><table width="100%"><tr> |
| <td valign="top"> |
| <h2><span class="refentrytitle">Running GLib Applications</span></h2> |
| <p>Running GLib Applications — |
| How to run and debug your GLib application |
| </p> |
| </td> |
| <td class="gallery_image" valign="top" align="right"></td> |
| </tr></table></div> |
| <div class="refsect1"> |
| <a name="id-1.2.7.3"></a><h2>Running and debugging GLib Applications</h2> |
| <div class="refsect2"> |
| <a name="id-1.2.7.3.2"></a><h3>Environment variables</h3> |
| <p> |
| The runtime behaviour of GLib applications can be influenced by a |
| number of environment variables. |
| </p> |
| <p><b>Standard variables. </b> |
| GLib reads standard environment variables like <code class="envar">LANG</code>, |
| <code class="envar">PATH</code>, <code class="envar">HOME</code>, <code class="envar">TMPDIR</code>, |
| <code class="envar">TZ</code> and <code class="envar">LOGNAME</code>. |
| </p> |
| <p><b>XDG directories. </b> |
| GLib consults the environment variables <code class="envar">XDG_DATA_HOME</code>, |
| <code class="envar">XDG_DATA_DIRS</code>, <code class="envar">XDG_CONFIG_HOME</code>, |
| <code class="envar">XDG_CONFIG_DIRS</code>, <code class="envar">XDG_CACHE_HOME</code> and |
| <code class="envar">XDG_RUNTIME_DIR</code> for the various XDG directories. |
| For more information, see the <a class="ulink" href="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html" target="_top">XDG basedir spec</a>. |
| </p> |
| <p><a name="G_FILENAME_ENCODING"></a><b><code class="envar">G_FILENAME_ENCODING</code>. </b> |
| 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. |
| </p> |
| <p><a name="G_BROKEN_FILENAMES"></a><b><code class="envar">G_BROKEN_FILENAMES</code>. </b> |
| 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. |
| </p> |
| <p><a name="G_MESSAGES_PREFIXED"></a><b><code class="envar">G_MESSAGES_PREFIXED</code>. </b> |
| 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 <code class="literal">G_LOG_LEVEL_MESSAGE</code> and |
| <code class="literal">G_LOG_LEVEL_INFO</code>. |
| The possible values are |
| <code class="literal">error</code>, |
| <code class="literal">warning</code>, |
| <code class="literal">critical</code>, |
| <code class="literal">message</code>, |
| <code class="literal">info</code> and |
| <code class="literal">debug</code>. |
| You can also use the special values |
| <code class="literal">all</code> and |
| <code class="literal">help</code>. |
| |
| This environment variable only affects the default log handler, |
| g_log_default_handler(). |
| </p> |
| <p><a name="G_MESSAGES_DEBUG"></a><b><code class="envar">G_MESSAGES_DEBUG</code>. </b> |
| A space-separated list of log domains for which informational |
| and debug messages should be printed. By default, these |
| messages are not printed. |
| |
| You can also use the special value <code class="literal">all</code>. |
| |
| This environment variable only affects the default log handler, |
| g_log_default_handler(). |
| </p> |
| <p><a name="G-DEBUG:CAPS"></a><b><code class="envar">G_DEBUG</code>. </b> |
| This environment variable can be set to a list of debug options, |
| which cause GLib to print out different types of debugging information. |
| </p> |
| <div class="variablelist"><table border="0" class="variablelist"> |
| <colgroup> |
| <col align="left" valign="top"> |
| <col> |
| </colgroup> |
| <tbody> |
| <tr> |
| <td><p><span class="term">fatal-warnings</span></p></td> |
| <td><p>Causes GLib to abort the program at the first call |
| to g_warning() or g_critical().</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">fatal-criticals</span></p></td> |
| <td><p>Causes GLib to abort the program at the first call |
| to g_critical().</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">gc-friendly</span></p></td> |
| <td><p>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.</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">resident-modules</span></p></td> |
| <td><p>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.</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">bind-now-modules</span></p></td> |
| <td><p>All modules loaded by GModule will bind their symbols |
| at load time, even when the code uses %G_MODULE_BIND_LAZY.</p></td> |
| </tr> |
| </tbody> |
| </table></div> |
| <p> |
| The special value all can be used to turn on all debug options. |
| The special value help can be used to print all available options. |
| </p> |
| <p><a name="G_SLICE"></a><b><code class="envar">G_SLICE</code>. </b> |
| This environment variable allows reconfiguration of the GSlice |
| memory allocator. |
| </p> |
| <div class="variablelist"><table border="0" class="variablelist"> |
| <colgroup> |
| <col align="left" valign="top"> |
| <col> |
| </colgroup> |
| <tbody> |
| <tr> |
| <td><p><span class="term">always-malloc</span></p></td> |
| <td><p>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 |
| <code class="literal">debug-blocks</code> is usually a better suited debugging |
| tool.</p></td> |
| </tr> |
| <tr> |
| <td><p><span class="term">debug-blocks</span></p></td> |
| <td> |
| <p>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 |
| <span class="emphasis"><em>always enable this option when running tests</em></span>. |
| 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.</p> |
| <p>An example of a memory corruption scenario that cannot be |
| reproduced with <code class="literal">G_SLICE=always-malloc</code>, but will |
| be caught by <code class="literal">G_SLICE=debug-blocks</code> is as follows: |
| </p> |
| <pre class="programlisting"> |
| void *slist = g_slist_alloc (); /* void* gives up type-safety */ |
| g_list_free (slist); /* corruption: sizeof (GSList) != sizeof (GList) */ |
| </pre> |
| </td> |
| </tr> |
| </tbody> |
| </table></div> |
| <p> |
| The special value all can be used to turn on all options. |
| The special value help can be used to print all available options. |
| </p> |
| <p><a name="G_RANDOM_VERSION"></a><b><code class="envar">G_RANDOM_VERSION</code>. </b> |
| 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. |
| </p> |
| <p><a name="LIBCHARSET_ALIAS_DIR"></a><b><code class="envar">LIBCHARSET_ALIAS_DIR</code>. </b> |
| Allows to specify a nonstandard location for the |
| <code class="filename">charset.aliases</code> file that is used by the |
| character set conversion routines. The default location is the |
| <em class="replaceable"><code>libdir</code></em> specified at compilation time. |
| </p> |
| <p><a name="TZDIR"></a><b><code class="envar">TZDIR</code>. </b> |
| Allows to specify a nonstandard location for the timezone data files |
| that are used by the #GDateTime API. The default location is under |
| <code class="filename">/usr/share/zoneinfo</code>. For more information, |
| also look at the <span class="command"><strong>tzset</strong></span> manual page. |
| </p> |
| </div> |
| <hr> |
| <div class="refsect2"> |
| <a name="setlocale"></a><h3>Locale</h3> |
| <p> |
| A number of interfaces in GLib depend on the current locale in which |
| an application is running. Therefore, most GLib-using applications should |
| call <code class="function">setlocale (LC_ALL, "")</code> to set up the current |
| locale. |
| </p> |
| <p> |
| 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.) |
| </p> |
| <p> |
| 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 <code class="function">strftime()</code>. |
| </p> |
| </div> |
| <p> |
| 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. |
| </p> |
| <p> |
| To use this you need a recent enough gdb that supports python scripting. Gdb 7.0 |
| should be recent enough, but branches of the "archer" gdb tree as used in Fedora 11 |
| and Fedora 12 should work too. 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. |
| </p> |
| <p> |
| 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. |
| </p> |
| <p> |
| 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 |
| </p> |
| <pre class="programlisting"> |
| gforeach i in some_list_variable: print *(GtkWidget *)l |
| </pre> |
| <p> |
| Which would print the contents of each widget in a list of widgets. |
| </p> |
| <hr> |
| <div class="refsect2"> |
| <a name="id-1.2.7.3.8"></a><h3>SystemTap</h3> |
| <p> |
| <a class="ulink" href="http://sourceware.org/systemtap/" target="_top">SystemTap</a> is a dynamic whole-system |
| analysis toolkit. GLib ships with a file <code class="filename">libglib-2.0.so.*.stp</code> which defines a |
| set of probe points, which you can hook into with custom SystemTap scripts. |
| See the files <code class="filename">libglib-2.0.so.*.stp</code>, <code class="filename">libgobject-2.0.so.*.stp</code> |
| and <code class="filename">libgio-2.0.so.*.stp</code> which |
| are in your shared SystemTap scripts directory. |
| </p> |
| </div> |
| <hr> |
| <div class="refsect2"> |
| <a name="id-1.2.7.3.9"></a><h3>Memory statistics</h3> |
| <p> |
| g_mem_profile() will output a summary g_malloc() memory usage, if memory |
| profiling has been enabled by calling |
| <code class="literal">g_mem_set_vtable (glib_mem_profiler_table)</code> upon startup. |
| </p> |
| <p> |
| If GLib has been configured with <code class="option">--enable-debug=yes</code>, |
| then g_slice_debug_tree_statistics() can be called in a debugger to |
| output details about the memory usage of the slice allocator. |
| </p> |
| </div> |
| </div> |
| </div> |
| <div class="footer"> |
| <hr>Generated by GTK-Doc V1.25.1</div> |
| </body> |
| </html> |