2011-04-26 80 views
21

在某處的代碼質量,我沒有寫的(但我想調試),斷言在glib庫失敗:如何讓GDB在GLib斷言失敗時中斷?

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

然而,GDB和代碼不斷去。我希望GDB打破這個斷言失敗的地方,以便我可以找出它失敗的原因。我沒有得到更多關於這個斷言在哪裏的信息。有沒有辦法讓GDB打破這種失敗?

+0

重複的:http://stackoverflow.com/questions/2450001/how-can-i -ind-out-where-is-my-code-causes-glib-gobject-critical但這個問題更清楚,所以我投票結束了另一個。 – ptomato 2011-04-26 08:13:59

回答

17

Break on g_log()。這包括所有的情況下,像g_warning()g_critical()

+9

有用的gdb命令是:'如果log_level == G_LOG_LEVEL_CRITICAL',則打斷g_log,如果log_level =打斷g_log,則G_LOG_LEVEL_WARNING'爲 – Mildred 2011-07-06 07:08:32

20

您應該添加這樣的一個環境變量:

G_DEBUG=fatal_warnings gdb ... 
+1

,G_DEBUG =致命錯誤就足夠了 – daf 2014-09-02 15:38:24

+2

'G_DEBUG = fatal-errors'不適用於我,但是'G_DEBUG = fatal-warnings'和'G_DEBUG = fatal-criticals',也檢出[其餘選項](https://developer.gnome.org/glib/stable/glib-running.html#G- DEBUG:CAPS)。 gdb的命令行可以是'gdb --args PROGRAM ARG1 ARG2',然後在gdb中輸入命令:'set env G_DEBUG = fatal-criticals',然後執行'run' – Nelson 2015-03-02 15:21:07