我調試在基於GObject的應用程序的引用泄漏。 GObject的有一個簡單的內置的機制,以幫助這些事情:你可以在gobject.c設置g_trap_object_ref
變量,你關心的對象,則該對象的每個ref或UNREF將達到一個斷點指令(通過G_BREAKPOINT()
) 。我可以指示gdb運行命令來響應SIGTRAP嗎?
所以果然,程序沒有得到停止,用gdb報告:
Program received signal SIGTRAP, Trace/breakpoint trap.
g_object_ref (_object=0x65f090) at gobject.c:2606
2606 old_val = g_atomic_int_exchange_and_add ((int *)&object->ref_count, 1);
(gdb) _
這是一個很好的開始。現在,一般情況下我一些腳本命令在斷點處手動設置使用commands 3
來運行(斷點3,說了)。但是,等效SIGTRAP
,即handle SIGTRAP
,不給我做什麼特別有趣的選項。有沒有一個好的方法來做到這一點?
(我知道,還有其他的方法來調試參考泄漏,如g_object_ref()
和g_object_unref()
在對象的ref_count
場,refdbg,腳本定期斷點設置觀察點,我現在就要去那些嘗試。我正在尋找一種方法來編寫對SIGTRAP
的響應腳本,它可能會在其他情況下有用,如果gdb不支持此功能,我會很驚訝。)
令人痛心的,但我想並非完全出乎意料。 – wjt 2010-09-24 16:44:38