[gtk/docs-gtk-org] glib: Add the Running GLib Apps section
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/docs-gtk-org] glib: Add the Running GLib Apps section
- Date: Tue, 10 Aug 2021 23:23:19 +0000 (UTC)
commit 9fd26a579e6ca2508e8351b4d0aa028435b8c5fa
Author: Emmanuele Bassi <ebassi gnome org>
Date: Tue Aug 10 23:37:28 2021 +0100
glib: Add the Running GLib Apps section
glib/glib/glib.toml.in | 1 +
glib/glib/meson.build | 1 +
glib/glib/running.md | 218 +++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 220 insertions(+)
---
diff --git a/glib/glib/glib.toml.in b/glib/glib/glib.toml.in
index 05170f8e40..29f3bfbd09 100644
--- a/glib/glib/glib.toml.in
+++ b/glib/glib/glib.toml.in
@@ -37,6 +37,7 @@ content_files = [
"logging.md",
"main-loop.md",
"reference-counting.md",
+ "running.md",
"testing.md",
"threads.md",
]
diff --git a/glib/glib/meson.build b/glib/glib/meson.build
index 28b4d40e53..4dc566328a 100644
--- a/glib/glib/meson.build
+++ b/glib/glib/meson.build
@@ -3,6 +3,7 @@ expand_content_files = [
'logging.md',
'main-loop.md',
'reference-counting.md',
+ 'running.md',
'testing.md',
'threads.md',
]
diff --git a/glib/glib/running.md b/glib/glib/running.md
new file mode 100644
index 0000000000..b5b7eec90d
--- /dev/null
+++ b/glib/glib/running.md
@@ -0,0 +1,218 @@
+Title: Running GLib Applications
+
+# Running GLib Applications
+
+## Environment variables
+
+The runtime behaviour of GLib applications can be influenced by a number of
+environment variables.
+
+Standard variables
+: GLib reads standard environment variables like `LANG`, `PATH`, `HOME`,
+ `TMPDIR`, `TZ` and `LOGNAME`.
+
+XDG directories
+: GLib consults the environment variables `XDG_DATA_HOME`,
+ `XDG_DATA_DIRS`, `XDG_CONFIG_HOME`, `XDG_CONFIG_DIRS`, `XDG_CACHE_HOME` and
+ `XDG_RUNTIME_DIR` for the various XDG directories. For more information, see
+ the [XDG basedir specification](https://specifications.freedesktop.org/basedir-spec/latest/).
+
+`G_FILENAME_ENCODING`
+: 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.
+
+`G_BROKEN_FILENAMES`
+: 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`.
+
+`G_MESSAGES_PREFIXED`
+: 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`. The possible values are error,
+ warning, critical, message, info and debug. You can also use the special
+ values all and help. This environment variable only affects the default log
+ handler, `g_log_default_handler()`.
+
+`G_MESSAGES_DEBUG`
+: 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 all. This environment variable only affects
+ the default log handler, `g_log_default_handler()`.
+
+`G_DEBUG`
+: This environment variable can be set to a list of debug options, which cause
+ GLib to print out different types of debugging information.
+
+ - `fatal-warnings`: 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.
+ - `fatal-criticals`: Causes GLib to abort the program at the first call
+ to `g_critical()`. This flag can be useful during debugging and
+ testing.
+ - `gc-friendly`: 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.
+ - `resident-modules`: 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.
+ - `bind-now-modules`: All modules loaded by GModule will bind their
+ symbols at load time, even when the code uses `G_MODULE_BIND_LAZY`.
+
+ 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.
+
+`G_SLICE`
+: This environment variable allows reconfiguration of the GSlice memory
+ allocator.
+
+ - `always-malloc`: 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 debug-blocks is usually a better suited
+ debugging tool.
+ - `debug-blocks`: 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 always enable this
+ option when running tests. 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.
+
+ An example of a memory corruption scenario that cannot be reproduced with
+ `G_SLICE=always-malloc`, but will be caught by G_SLICE=debug-blocks is as
+ follows:
+
+ void *slist = g_slist_alloc (); /* void* gives up type-safety */
+ g_list_free (slist); /* corruption: sizeof (GSList) != sizeof (GList) */
+
+
+ The special value `all` can be used to turn on all options. The special
+ value `help` can be used to print all available options.
+
+`G_RANDOM_VERSION`
+: 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.
+
+`LIBCHARSET_ALIAS_DIR`
+: Allows to specify a nonstandard location for the `charset.aliases` file
+ that is used by the character set conversion routines. The default
+ location is the `libdir` specified at compilation time.
+
+`TZDIR`
+: Allows to specify a nonstandard location for the timezone data files that
+ are used by the `GDateTime` API. The default location is under
+ `/usr/share/zoneinfo`. For more information, also look at the `tzset` manual
+ page.
+
+`G_ENABLE_DIAGNOSTIC`
+: If set to a non-zero value, this environment variable enables diagnostic
+ messages, like deprecation messages for GObject properties and signals.
+
+`G_DEBUGGER`
+: 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 `%p` and `%e` 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 `%e` is absent, or if the debugger is not able
+ to signal events, GLib will resume execution after 60 seconds. If `%p` is
+ absent, the debugger won't know which process to attach to, and GLib will
+ also resume execution after 60 seconds. Additionally, even if `G_DEBUGGER`
+ is not set, GLib would still try to print basic exception information (code
+ and address) into `stderr`. By default the debugger gets a new console
+ allocated for it. Set the `G_DEBUGGER_OLD_CONSOLE` 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. 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 `G_DEBUGGER`. See also `G_VEH_CATCH`.
+
+`G_VEH_CATCH`
+: 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. The `G_VEH_CATCH` environment variable
+ augments Vectored Exception Handling on Windows (see `G_DEBUGGER`),
+ allowing GLib to catch more exceptions. Set this variable to a
+ comma-separated list of hexadecimal exception codes that should
+ additionally be caught. By default GLib will only catch Access Violation,
+ Stack Overflow and Illegal Instruction exceptions.
+
+## Locale
+
+A number of interfaces in GLib depend on the current locale in which an
+application is running. Therefore, most GLib-using applications should call
+`setlocale (LC_ALL, "")` to set up the current locale.
+
+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.)
+
+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 `strftime()`.
+
+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.
+
+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.
+
+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.
+
+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
+
+`gforeach i in some_list_variable: print *(GtkWidget *)l`
+
+Which would print the contents of each widget in a list of widgets.
+
+## SystemTap
+
+SystemTap is a dynamic whole-system analysis toolkit. GLib ships with a file
+`libglib-2.0.so.*.stp` which defines a set of probe points, which you can hook
+into with custom SystemTap scripts. See the files `libglib-2.0.so.*.stp`,
+`libgobject-2.0.so.*.stp` and `libgio-2.0.so.*.stp` which are in your shared
+SystemTap scripts directory.
+
+## Memory statistics
+
+`g_mem_profile()` will output a summary `g_malloc()` memory usage, if memory
+profiling has been enabled by calling:
+
+```
+g_mem_set_vtable (glib_mem_profiler_table);
+```
+
+upon startup.
+
+If GLib has been configured with full debugging support, then
+`g_slice_debug_tree_statistics()` can be called in a debugger to output details
+about the memory usage of the slice allocator.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]