在一坨我没写过的代码中(但是我正在尝试调试),GLib库中的一个断言失败了:
(process:31987): GLib-CRITICAL **: g_hash_table_lookup: assertion `hash_table != NULL' failed
然而,GDB与代码继续执行。我希望GDB在断言失败时中断,以便我可以找出失败的原因。我没有得到任何关于此断言位置的更多信息。是否有一种方法可以让GDB在这种情况下中断?
在一坨我没写过的代码中(但是我正在尝试调试),GLib库中的一个断言失败了:
(process:31987): GLib-CRITICAL **: g_hash_table_lookup: assertion `hash_table != NULL' failed
然而,GDB与代码继续执行。我希望GDB在断言失败时中断,以便我可以找出失败的原因。我没有得到任何关于此断言位置的更多信息。是否有一种方法可以让GDB在这种情况下中断?
你应该像这样添加一个环境变量:
G_DEBUG=fatal_warnings gdb ...
G_DEBUG=fatal-errors
对我不起作用,但 G_DEBUG=fatal-warnings
和 G_DEBUG=fatal-criticals
可以使用,还可以查看其他选项。对于 gdb 的行可能是 gdb --args PROGRAM ARG1 ARG2
,然后在 gdb 中发出命令: set env G_DEBUG=fatal-criticals
然后 run
。 - Nelson在 g_log()
处设置断点。这包括所有情况,例如 g_warning()
,g_critical()
等。
break g_log if log_level == G_LOG_LEVEL_CRITICAL
和break g_log if log_level == G_LOG_LEVEL_WARNING
。 - Mildred