Вывод сообщений и функции отладки

Message Output and Debugging Functions — Функции для вывода сообщений и помощь отладки приложений.

Краткое описание

#include <glib.h> void g_print (const gchar *format, ...); GPrintFunc g_set_print_handler (GPrintFunc func); void (*GPrintFunc) (const gchar *string); void g_printerr (const gchar *format, ...); GPrintFunc g_set_printerr_handler (GPrintFunc func); #define g_return_if_fail (expr) #define g_return_val_if_fail (expr,val) #define g_return_if_reached () #define g_return_val_if_reached (val) #define g_assert (expr) #define g_assert_not_reached () void g_on_error_query (const gchar *prg_name); void g_on_error_stack_trace (const gchar *prg_name); #define G_BREAKPOINT ()

Описание

Эти функции обеспечивают поддержку вывода сообщений.

Детали

g_print ()

void g_print (const gchar *format, ...);

Вывод форматированных сообщений через обработчик печати. По умолчанию обработчик печати просто выводит сообщения на стандартный вывод (stdout).

g_print() не должна использоваться внутри библиотеки для отладочных сообщений, так как они могут переадресовываться приложениями в специальные окна сообщений или даже в файлы. Вместо неё библиотека должна использовать g_log(), или удобные функции g_message(), g_warning() и g_error().

format : форматированное сообщение. Смотрите printf() документацию.
... : параметры для вставки в форматированную строку.

g_set_print_handler ()

GPrintFunc g_set_print_handler (GPrintFunc func);

Устанавливает обработчик печати. Любые сообщения помещаемые в g_print() будут выводиться через новый обработчик. Обработчик по умолчанию просто выводит сообщения на stdout. Обеспечивая собственный обработчик вы можете перенаправить вывод, например в виджет GTK+ или файл журнала.

func : новый обработчик печати.
Возвращает : старый обработчик печати.

GPrintFunc ()

void (*GPrintFunc) (const gchar *string);

Определяет тип функции обработчика печати. Их вызывают для вывода полностью отформатированной строки на output.

string : сообщение для вывода.

g_printerr ()

void g_printerr (const gchar *format, ...);

Выводит отформатированные сообщения через обработчик сообщений об ошибках. По умолчанию обработчик просто выводит сообщения на stderr.

g_printerr() не должна использоваться внутри библиотеки. Вместо неё используйте g_log(), или удобные функции g_message(), g_warning() и g_error().

format : отформатированное сообщение. Смотрите документацию для printf().
... : параметры для вставки в форматированную строку.

g_set_printerr_handler ()

GPrintFunc g_set_printerr_handler (GPrintFunc func);

Устанавливает обработчик для печати сообщений об ошибках. Любые сообщения помещённые в g_printerr() будут выводиться через новый обработчик. Обработчик по умолчанию просто выводит сообщения на stderr. Обеспечивая собственный обработчик вы можете перенаправить вывод, например в виджет GTK+ или файл журнала.

func : новый обработчик сообщений об ошибках.
Возвращает : старый обработчик сообщений об ошибках.

g_return_if_fail()

#define g_return_if_fail(expr)

Возвращается из текущей функции если выражение не верно. Если выражение вычисляет FALSE, регистрируется критическое сообщение и функция возвращается. Это может использоваться только в функциях которые не возвращают значение.

expr : выражение для проверки.

g_return_val_if_fail()

#define g_return_val_if_fail(expr,val)

Возвращается из текущей функции, возвращая значение val, если выражение не верно. Если выражение вычисляет FALSE, регистрируется критическое сообщение и возвращается val.

expr : выражение для проверки.
val : значение возвращаемое из текущей функции если выражение не верно.

g_return_if_reached()

#define g_return_if_reached()

Регистрирует критическое сообщение и возвращается из текущей функции. Это используется только в функциях которые не возвращают значений.


g_return_val_if_reached()

#define g_return_val_if_reached(val)

Регистрирует критическое сообщение и возвращает val.

val : значение возвращаемое из текущей функции.

g_assert()

#define g_assert(expr)

Отладочный макрос для завершения приложения если выражение неправильно. Если выражение неправильно (то есть логическое выражение не верно), регистрируется сообщение об ошибке и приложение закрывается.

Макрос можно отключить в завершающем релизе определив G_DISABLE_ASSERT при компиляции приложения.

expr : проверяемое выражение.

g_assert_not_reached()

#define g_assert_not_reached()

Отладочный макрос для прекращения выполнения приложения при его достижении. Если он достигнут, регистрируется сообщение об ошибке и приложение закрывается.

Макрос можно отключить при окончательной реализации с помощью определения G_DISABLE_ASSERT при компиляции приложения.


g_on_error_query ()

void g_on_error_query (const gchar *prg_name);

Подсказка ввода для пользователя [E]xit, [H]alt, показать [S]tack trace или [P]roceed. Эта функция только для отладки использования. Следующий пример демонстрирует как её можно использовать совместно с функцией g_log().

#include <glib.h> static void log_handler (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) { g_log_default_handler (log_domain, log_level, message, user_data); g_on_error_query (MY_PROGRAM_NAME); } int main (int argc, char *argv[]) { g_log_set_handler (MY_LOG_DOMAIN, G_LOG_LEVEL_WARNING | G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL, log_handler, NULL); /* ... */

Если [E]xit выбран, приложение закрывается с помощью вызова _exit(0).

Если выбрано [H]alt, приложение входит в бесконечный цикл. Бесконечный цикл можно остановить только уничтожив приложение, или установив glib_on_error_halt в FALSE (возможно через отладчик).

Если выбрано [S]tack trace, вызывается g_on_error_stack_trace(). Это вызывает gdb, который присоединяется к текущему процессу и показывает распечатку стека (stack trace). Подсказка ввода показывается снова.

Если выбрано [P]roceed, функция завершается возвращением.

Эта функция может вызвать разные действия на не-UNIX платформах.

prg_name : имя программы, необходимо отладчику gdb для опции распечатки стека ([S]tack trace option). Если prg_name равно NULL, g_get_prgname() вызывается для получения имени программы (которая будет работать правильно если вызваны gdk_init() или gtk_init()).

g_on_error_stack_trace ()

void g_on_error_stack_trace (const gchar *prg_name);

Вызывает gdb, который присоединяется к текущему процессу и показывает распечатку стека. Вызывается функцией g_on_error_query() когда выбрана опция [S]tack trace.

Эта функция может выполнять разные действия на не-UNIX платформах.

prg_name : имя програмы, нужно отладчику gdb для опции распечатки стека ([S]tack trace option). Если prg_name равно NULL, g_get_prgname() вызывается для получения имени программы (которая будет правильно работать если вызваны gdk_init() или gtk_init()).

G_BREAKPOINT()

#define G_BREAKPOINT()

Вставляет контрольную точку в код (только на x86 архитектуре).