2011-04-26 10 views
21

En algún lugar de una masa de código que no he escrito (pero estoy tratando de depurar), una aserción falla en la biblioteca GLib:¿Cómo logro que GDB se rompa en una falla de aserción de GLib?

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

Sin embargo, el BGF y el código sigue en marcha. Me gustaría que GDB rompa donde falla esta afirmación para que pueda descubrir por qué está fallando. No recibo más información sobre dónde está esta afirmación. ¿Hay alguna manera de lograr que GDB rompa esa falla?

+0

Duplicado de: http://stackoverflow.com/questions/2450001/how-can-i -find-out-where-is-my-code-causing-glib-gobject-critical pero esta pregunta es más clara, así que estoy votando para cerrar esa otra. – ptomato

Respuesta

17

Break on g_log(). Esto cubre todos los casos como g_warning(), g_critical(), etc.

+9

Los comandos gdb útiles son: 'break g_log si log_level == G_LOG_LEVEL_CRITICAL' y' break g_log si log_level == G_LOG_LEVEL_WARNING' – Mildred

20

Usted debe agregar una variable de entorno como este:

G_DEBUG=fatal_warnings gdb ... 
+1

para los errores, G_DEBUG = fatal-errors es suficiente – daf

+2

'G_DEBUG = fatal-errors' no funciona para mí , pero 'G_DEBUG = fatal-warnings' y' G_DEBUG = fatal-criticals' es, también echa un vistazo a [resto de opciones] (https://developer.gnome.org/glib/stable/glib-running.html#G- DEBUG: CAPS). La línea para gdb podría ser 'gdb --args PROGRAM ARG1 ARG2' y luego dentro de gdb emitir los comandos:' set env G_DEBUG = fatal-criticals' y luego 'run' – Nelson

Cuestiones relacionadas