我如何找出导致GLib-GObject-CRITICAL的代码在哪里?

mic*_*ael 5 linux gtk

当C / C ++应用程序失败并显示以下CRITICAL消息时,您能告诉我如何找出导致错误的代码在哪里吗?

我试图在调试器中运行它,试图在程序失败时执行“ 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
Run Code Online (Sandbox Code Playgroud)

pto*_*ato 6

您可以中断g_log,然后从那里进行回溯。

  • 您的调试器应该允许您中断函数名称。例如,在 gdb 中,输入 `break g_log`。根据您的系统,您可能需要安装一些“调试”包,例如 Fedora 上的 `glib-debuginfo`。通常它已经自动安装。 (2认同)

bra*_*che 5

当您在 gdb 中运行它时,您应该将 --g-fatal-warnings 传递给您的应用程序。

  • 尝试在运行程序时设置环境 `G_DEBUG=fatal_warnings`。 (2认同)