xcode 控制檯除錯功能

Eddiegooo發表於2017-12-19

斷點除錯:

可以使用命令列,也可以直接在xcode上滑鼠操作。個人喜歡直接滑鼠操作,來的更快些。這個因個人喜好來吧,畢竟有人就是鍾愛命令列,就是喜歡記那些命令列,還可以很好地裝逼,給看不懂的人一種很流弊的感覺。。

不多說了 進入正題

xcode控制檯命令之 “Image”

感覺這個還是很有用的;

使用場景

1.打了全域性斷點,也捕獲不到crash位置的時候 2.程式直接crash在了main函式裡

使用方法

當程式直接crash掉了,還不能定位具體哪裡的問題,這時候xcode控制檯一般會出現以下顯示:

xcode截圖.png

我們大概推測可以判斷出是哪裡出問題了,應該就是下面框住的地方; 這裡有一個地址:0x000000010b9ce919 這時候就可以使用image命令快速定位問題程式碼位置了 具體命令使用:直接在控制檯鍵入以下命令即可:

image lookup --address 0x000000010b9ce919
複製程式碼

這時候就會列印出具體哪裡的程式碼異常

具體錯誤程式碼.png

列印結果顯示LQScrollView3D`裡的-[ViewController viewDidLoad] 方法 ,在 ViewController.m的第25行 錯誤。 去到程式碼裡看,確實是這裡錯誤。。 這種直接可以定位到的問題就不需要,不能斷點定位到的問題,是不是很方便啊。

二 xcode控制檯命令之 “expression”

作用:修改某一個屬性的值。 使用: 先在你計劃修改的值程式碼位置打上斷點,然後輸入命令expression 修改你想修改的值,在繼續執行斷點,就可以看到你修改的值了。 eg:url 中包含中文,為非法url。擷取分析閃退了。這是你可以直接用expression修改這個url值,看是否是由於含有中文導致。 使用例項:

初始url.png
修改:—— 直接輸入expression 命令修改你想改的值,如果修改成功,會直接顯示你修改好的值。
修改url值.png
修改後:—— 繼續向下執行斷點,在列印,就可以看到你修改的那個屬性值變化了。
修改之後列印的url.png

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]);
    }
複製程式碼

相關文章