簡體   English   中英

釋放內存時在內存地址上設置一個斷點:lldb

[英]Set a breakpoint on memory address when it is being freed: lldb

嘗試雙重釋放該地址時,我的iOS應用程序在內存地址上崩潰。 我嘗試了多種方法來嘗試了解導致雙重免費的原因,例如:監視點或啟用Zombies或在Xcode中使用Instruments,但無濟於事。 有什么辦法可以在該內存地址上設置某種斷點,以使其在釋放時命中,並且我將知道誰在試圖釋放它? 我還嘗試在free方法上放置一個符號斷點,但是由於連續的free調用,它使應用程序掛起。

您是否嘗試過使用ASAN? 您可以在項目的“運行方案”中將其打開(這是第一項“ Address Sanitizer”)。 由於它將檢測您的代碼,因此將強制進行重建。 但是它在您的代碼中插入的檢測將檢測到double free,在此處停止該過程,並向您顯示malloc的調用站點和該地址的第一個free事件。 這對於檢測此類內存問題非常有用。

您需要一個條件斷點。 free上創建符號斷點,然后右鍵單擊它,然后單擊“編輯斷點...”。

您需要在此處設置一個條件,以便僅針對您的特定參數調用斷點。 使用LLDB的$arg1變量引用free (您的內存塊)的第一個參數,並為其條件設置類似以下內容:

$arg1 == 0x0000000000001234

但請使用您感興趣的實際指針值。

繼續。 僅當釋放該特定指針處的內存塊時,才會觸發斷點。

暫無
暫無

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

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