如何让GDB打破GLib断言失败?

gny*_*his 23 debugging gdb glib

在我没有编写的大量代码中的某处(但我正在尝试调试),GLib库中的断言失败:

(process:31987): GLib-CRITICAL **: g_hash_table_lookup: assertion `hash_table != NULL' failed
Run Code Online (Sandbox Code Playgroud)

但是,GDB和代码仍在继续.我希望GDB能够打破这个断言失败的地方,这样我才能找出它失败的原因.我没有得到关于这个断言在哪里的更多信息.有没有办法让GDB在这样的失败中打破?

lov*_*356 24

你应该添加一个这样的环境变量:

G_DEBUG=fatal_warnings gdb ...
Run Code Online (Sandbox Code Playgroud)

  • `G_DEBUG = fatal-errors`对我不起作用,但是'G_DEBUG =致命警告'和'G_DEBUG =致命危险'是,也可以查看[其他选项](https://developer.gnome.org/油嘴/稳定/油嘴-running.html#G-DEBUG:CAPS).gdb的行可以是`gdb --args PROGRAM ARG1 ARG2`然后在gdb里面发出命令:`set env G_DEBUG = fatal-criticals`然后`run` (3认同)

pto*_*ato 18

休息g_log().这包括所有的情况下,像g_warning(),g_critical()等等.

  • 有用的gdb命令是:`break g_log if log_level == G_LOG_LEVEL_CRITICAL`和`break g_log if log_level == G_LOG_LEVEL_WARNING` (11认同)