导致 Gtk 在断言时中止

标签 c gtk gdb warnings

我必须调试一个严重依赖 Gtk 的程序。问题是由于某些原因,在使用 GtkWindow 对象时开始出现许多运行时警告。问题是,即使 Gtk 提示严重错误,它也不会因这些错误而中止。我没有代码库的更改历史记录,所以我唯一的选择似乎是遍历所有似乎可疑的 gtk 调用并查看问题出在哪里。但是,如果我能以某种方式导致 Gtk 因这个错误而中止,我可以用 gdb 运行它并尝试获取回溯并找到错误的确切位置。知道如何做到这一点吗?

GLib-GObject-WARNING **: invalid uninstantiatable type `<invalid>' in cast to `GObject'
GLib-GObject-CRITICAL **: g_object_get_data: assertion `G_IS_OBJECT (object)' failed
GLib-GObject-WARNING **: invalid uninstantiatable type `<invalid>' in cast to `GObject'
GLib-GObject-CRITICAL **: g_object_get_data: assertion `G_IS_OBJECT (object)' failed
GLib-GObject-WARNING **: invalid uninstantiatable type `<invalid>' in cast to `GObject'
GLib-GObject-CRITICAL **: g_object_get_data: assertion `G_IS_OBJECT (object)' failed

最佳答案

我正在收集 Matt 提到的方法和我发现的方法以在此处提供完整的答案。我会将其标记为已选择的答案并对 Matt 的答案投赞成票。

强制 gtk 在出错时进行 agort 的三种方法:

  1. G_DEBUG=fatal_warnings ./myprog ...
  2. ./myprog -prog-args --g-fatal-warnings
  3. 使用 g_log_set_handler 和/或 g_log_default_handler 并提供您自己设计的 GLogFunc,它根据为每条消息传递给它的 GLogLevelFlags 中止。

我还应该提到 g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL|G_LOG_LEVEL_WARNING); 以使列表完整,即使“总是致命”不是我想要的。

关于导致 Gtk 在断言时中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4646510/

相关文章:

c - 函数 ‘sched_setaffinity’ 的隐式声明

eclipse - 在 Eclipse 中使用同名文件调试 C++

c++ - 保存并重新启动暂停的 gdb session

linux - 我有一个问题。汇编和 gdb 新手

从 Linux 到 Windows 7 上的 Visual Studio 2010 的 C 编程问题

c - 使用 strcat 时添加的随机空格

c - STM32F103 GPIO 端口

python-2.7 - 使用 GTK 出错

c - 在函数内初始化结构的成员

python - 如何在向后兼容的代码中使用 GLib.io_add_watch ?