簡體   English   中英

URLSession dataTask 特定 URL 處的符號斷點

[英]URLSession dataTask symbolic breakpoint at specific URL

我有一個 API 包裝器,它記錄URLSession請求的所有 URL。 我需要在特定的 URL 調用處設置斷點,以便在 UI 中輕松找到初始化 API 調用的位置。

在任何URLSession dataTask處停止都沒有問題。 我正在使用lldb命令br set -F '-[__NSCFURLSessionTask resume]'

添加符號斷點

然后程序停止:

在此處輸入圖片說明

所以,問題:

有沒有辦法從上面屏幕截圖的上下文中獲取 URL,將其與提供的 URL 匹配,如果 URL 不匹配,則繼續?

或者也許是其他一些想法(例如lldb python 腳本)?

讓我們從找出斷點處的instance指針值開始。 由於在Swift .resume()調用中發送了一個Objective-C selector ,因此我們必須回.resume()以下實際實現:

objc_msgSend(receiver, selector, arg1, arg2, ...)

無需贅述,我們依靠 MacOS/iOS ABI 指定哪些 CPU 寄存器用於傳遞參數。 我們對查找receiver instance指針值的第一個參數特別感興趣。

私有__NSCFURLSessionTask恰好具有以下方法:

- (NSURL*)currentRequest_URL;

@JimIngham 指出了一個驚人的捷徑來實現這一點,通用參數同義詞是$arg1 $arg2 ... in lldb (請注意,選擇器的arg1 arg2將分別是lldb$arg3 $arg4 )這將其簡化為:

po [$arg1 currentRequest_URL] 
https://www.google.com

如果x86 32bit Simulator對應於低於iPhone 5S設備,您將使用:

(lldb) x/x $esp+4
     0xbff9e050: 0x7874dd70
(lldb) po [0x7874dd70 currentRequest_URL]
    https://www.google.com

暫無
暫無

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

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