斷點除錯:
可以使用命令列,也可以直接在xcode上滑鼠操作。個人喜歡直接滑鼠操作,來的更快些。這個因個人喜好來吧,畢竟有人就是鍾愛命令列,就是喜歡記那些命令列,還可以很好地裝逼,給看不懂的人一種很流弊的感覺。。
不多說了 進入正題
xcode控制檯命令之 “Image”
感覺這個還是很有用的;
使用場景
1.打了全域性斷點,也捕獲不到crash位置的時候 2.程式直接crash在了main函式裡
使用方法
當程式直接crash掉了,還不能定位具體哪裡的問題,這時候xcode控制檯一般會出現以下顯示:
我們大概推測可以判斷出是哪裡出問題了,應該就是下面框住的地方; 這裡有一個地址:0x000000010b9ce919 這時候就可以使用image命令快速定位問題程式碼位置了 具體命令使用:直接在控制檯鍵入以下命令即可:
image lookup --address 0x000000010b9ce919
複製程式碼
這時候就會列印出具體哪裡的程式碼異常
列印結果顯示LQScrollView3D`裡的-[ViewController viewDidLoad] 方法 ,在 ViewController.m的第25行 錯誤。 去到程式碼裡看,確實是這裡錯誤。。 這種直接可以定位到的問題就不需要,不能斷點定位到的問題,是不是很方便啊。
二 xcode控制檯命令之 “expression”
作用:修改某一個屬性的值。
使用: 先在你計劃修改的值程式碼位置打上斷點,然後輸入命令expression
修改你想修改的值,在繼續執行斷點,就可以看到你修改的值了。
eg:url 中包含中文,為非法url。擷取分析閃退了。這是你可以直接用expression修改這個url值,看是否是由於含有中文導致。
使用例項:
PS: 修改某一個屬性值,讓其立即生效執行,最好用的還是青花瓷Charles抓包工具啊。 斷點--修改屬性值--繼續執行,立即生效。
青花瓷不破解也可以使用,詳細參考:唐巧——Charles 從入門到精通
小Tips: 為了獲取一些堆疊資訊以便於快準狠的定位問題,可以在main函式裡:
int main(int argc, char * argv[]) {
@try {
@autoreleasepool
{
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
@catch (NSException* exception)
{
NSDebugLog(@"Exception=%@\nStack Trace:%@", exception, [exception callStackSymbols]);
}
複製程式碼