2011-04-26 3 views
21

Где-то в массе кода, который я не писал (но я пытаюсь отлаживать), утверждение терпит неудачу в библиотеке GLib:Как мне заставить GDB ломаться при ошибке утверждения GLib?

(process:31987): GLib-CRITICAL **: g_hash_table_lookup: assertion `hash_table != NULL' failed 

Однако, GDB и код продолжает идти. Я бы хотел, чтобы GDB сломался там, где это утверждение терпит неудачу, чтобы я мог выяснить, почему он терпит неудачу. Мне больше не дают информации о том, где это утверждение. Есть ли способ заставить GDB нарушить такой провал?

+0

дубликата: http://stackoverflow.com/questions/2450001/how-can-i -find-out-where-is-my-code-cause-glib-gobject-критический, но этот вопрос более ясен, поэтому я голосую, чтобы закрыть этот другой. – ptomato

ответ

17

Перерыв на g_log(). Это охватывает все случаи, как g_warning(), g_critical() и т.д.

+9

Полезные команды gdb: 'break g_log if log_level == G_LOG_LEVEL_CRITICAL' и' break g_log, если log_level == G_LOG_LEVEL_WARNING' – Mildred

20

Вы должны добавить переменную окружения, как это:

G_DEBUG=fatal_warnings gdb ... 
+1

для ошибок, G_DEBUG = fatal-errors достаточно – daf

+2

'G_DEBUG = fatal-errors' не работает для меня , но 'G_DEBUG = fatal-warnings' и' G_DEBUG = fatal-criticals', также проверьте [остальные параметры] (https://developer.gnome.org/glib/stable/glib-running.html#G- DEBUG: CAPS). Линией для gdb может быть 'gdb -args PROGRAM ARG1 ARG2', а затем внутри gdb выдать команды:' set env G_DEBUG = fatal-criticals', а затем 'run' – Nelson

Смежные вопросы