我怎么知道我的代码在哪里导致GLib-GObject-CRITICAL

当我的C / C ++应用程序失败,以下关键,可以请告诉我如何找出导致错误的代码在哪里? 我试图在Debugger中运行它,试图在程序失败时执行“bt”。 但是它没有显示导致CRITICAL的代码在哪里:

(process:3155): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function (process:3155): GLib-CRITICAL **: g_once_init_leave: assertion `initialization_value != 0' failed (process:3155): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function (process:3155): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function (process:3155): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function (process:3155): GLib-GObject-CRITICAL **: g_type_add_interface_static: assertion `G_TYPE_IS_INSTANTIATABLE (instance_type)' failed (process:3155): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function 

谢谢。

很高兴你解决了它,但为了将来的参考,你可以打破g_log ,然后从那里做一个回溯。

当你在gdb中运行时,你应该把 – g-fat-warnings传递给你的应用程序。

没关系我的问题。 我认为它确实显示了导致问题的位置(在堆栈跟踪中更深):

 (gdb) bt #0 0x00da5422 in __kernel_vsyscall () #1 0x00c70e15 in pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_cond_wait.S:122 #2 0x008a5800 in g_once_init_enter_impl () from /lib/libglib-2.0.so.0 #3 0x00800e36 in g_initially_unowned_get_type () from /usr/lib/libgobject-2.0.so.0 #4 0x00271f15 in gtk_object_get_type () from /usr/lib/libgtk-x11-2.0.so.0 #5 0x0036aa4c in gtk_widget_get_type () from /usr/lib/libgtk-x11-2.0.so.0 #6 0x001b8485 in gtk_container_get_type () from /usr/lib/libgtk-x11-2.0.so.0 #7 0x0031b3b5 in gtk_toolbar_get_type () from /usr/lib/libgtk-x11-2.0.so.0 #8 0x0031d717 in gtk_toolbar_new () from /usr/lib/libgtk-x11-2.0.so.0 

除非您发布导致这些错误的代码,否则我们无法提供多少帮助。

看这个输出行:

(进程:3155):GLib-GObject-CRITICAL **:/build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458:初始化断言失败,在此函数之前使用IA__g_type_init()

我们可以看到gtype.c的第2458行的一个断言失败了。 失败消息格式为<error type> <file name>:<line number> <details> 。 从它的外观来看,这些错误是来自于内部的。

除此之外,没有生成输出的代码就没有太多的东西可以说了。