The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

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

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 архитектуре).




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру