簡體   English   中英

使用gdb調試回調

[英]Debugging a callback with gdb

我正在嘗試使用gdb調試一個C程序,該程序一切正常,直到我將指針傳遞給函數(到第三方庫),此后gdb失去了焦點,程序運行而沒有在回調函數中碰到斷點。

例如,我從libpcap庫中調用pcap_loop ,它需要一個指向我的回調函數got_packet的指針。

 pcap_loop(handle, num_packets, got_packet, NULL);

一旦我使用gdb進入或超過此行,我的got_packet就不會被擊中。
為什么呢
有任何想法嗎?

在某些情況下,可以跳過GDB斷點,尤其是在調試啟用了優化功能的調試代碼時,但是最可能的答案是庫函數沒有達到您的期望。

GDB無法進入沒有調試信息的庫,因此,就像您所說的那樣,它似乎只是“失去了焦點”,在返回點上設置了一個臨時斷點,並等待函數完成。 這仍然不能阻止回調內部的斷點觸發。

如果您使用的是來自操作系統存儲庫的庫,則可能會發現可以安裝“調試”軟件包。 這將使您能夠進入庫代碼,並可能找出問題所在。

但是,添加printf調試或以某種方式“破壞” got_packet函數通常會容易得多,該函數會導致信號( *(int *)0 = 1 ),並以這種方式使自己滿意,無論是否調用它。

如果您可以證明函數確實在被調用,而GDB確實沒有捕獲斷點,則說明您有一個GDB錯誤(或內核錯誤)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM