2014-03-01 29 views
1

在我的Python 2.7 + GTK + 3 + PyGI + GUI與Glade3應用進行的我得到了很多的錯誤是這樣的:將Python和GTK3錯誤打印到stderr,它們是什麼?

(python.exe:81868): Gdk-CRITICAL **: gdk_device_get_source: assertion 'GDK_IS_DEVICE (device)' failed 

沒有例外Python中發生的事情,並沒有什麼表現錯誤的程序。他們似乎是無害的,但爲了清潔,我想阻止他們發生。

我注意到,這發生在例如激活和停用菜單項或更改組合框上的選擇時。我試圖設置一個回調,在觸發問題的事件上什麼都不做,但沒有改變。

那麼,它們是什麼意思?我如何阻止他們?

+0

現在我的錯誤是致命的...'(python.exe:66232):GTK的嚴重* *:gtk_text_attributes_ref:assertion'values!= NULL'failed'並且我的程序死亡。有沒有解釋Gtk錯誤的列表?如果我在python調試器中運行,它不會發生!任何人? – jpcgt

回答

2

這些消息是由使用Glib調試功能的代碼發出的,參見[1],當斷言失敗時。這些斷言由Glib和構建於Glib上的許多組件使用,以報告無效狀態,無效參數等。

通常,這樣的消息暗示某個應用程序中存在錯誤,因此尋找原因是個好主意。爲此,請使用適當的值導出G_DEBUG環境,請參見[2]。在你的情況下,你會設置G_DEBUG=fatal-criticals,並且當發出重要消息時程序將中止。如果您在gdb中運行應用程序,並在程序中止時打印回溯圖,則應該瞭解導致消息發出的原因。請記住爲glib和gtk/gdk安裝debuginfo包以獲取可用的回溯。

要被髮射禁用的消息,如果你(可能是因爲事業是不是你的代碼,但即一些其他的庫)不能修復該問題,你可以看看g_log_set_handler,參見[3]。

+0

這些錯誤與我的代碼完全無關。即使沒有處理程序,它們也會在與GUI交互時發生。 GUI已經和Glade3放在了一起。我的程序使用Python,因此我無法調試GLib中發生了什麼 – jpcgt

+1

GLib.log_set_handler()在PiGI中不存在!它在文檔中提到,但它不在那裏。 – jpcgt

+0

只需通過gdb運行python:'gdb python myapp.py',就可以調試glib內部發生的情況。至於'set_log_handler',我擔心你是對的,請參閱https://bugzilla.gnome.org/show_bug.cgi?id=670507。 – smani