如何让GDB在GLib断言失败时中断?

26

在一坨我没写过的代码中(但是我正在尝试调试),GLib库中的一个断言失败了:

(process:31987): GLib-CRITICAL **: g_hash_table_lookup: assertion `hash_table != NULL' failed

然而,GDB与代码继续执行。我希望GDB在断言失败时中断,以便我可以找出失败的原因。我没有得到任何关于此断言位置的更多信息。是否有一种方法可以让GDB在这种情况下中断?


这是重复的问题: https://dev59.com/gEzSa4cB1Zd3GeqPn5Ur 但是这个问题更加清晰,所以我投票关闭另一个。 - ptomato
2个回答

26

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

G_DEBUG=fatal_warnings gdb ...

4
G_DEBUG=fatal-errors 对我不起作用,但 G_DEBUG=fatal-warningsG_DEBUG=fatal-criticals 可以使用,还可以查看其他选项。对于 gdb 的行可能是 gdb --args PROGRAM ARG1 ARG2,然后在 gdb 中发出命令: set env G_DEBUG=fatal-criticals 然后 run - Nelson

20

g_log() 处设置断点。这包括所有情况,例如 g_warning()g_critical() 等。


11
有用的gdb命令是:break g_log if log_level == G_LOG_LEVEL_CRITICALbreak g_log if log_level == G_LOG_LEVEL_WARNING - Mildred

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接