IOS 除錯日誌輸出

2021-06-23 01:02:46 字數 1208 閱讀 9660

+(void)logmessagebyuuid:(nsstring *)uuid

這樣就會吧debug寫入乙個檔案,在測試過程中出現bug 把手機中得日誌倒出來就可以檢視日誌了。

這樣就可以除錯了。

對於stderr 檔案的解釋來自

為某個外部附件開發應用程式的情況下,開發者無法用 xcode 進行除錯或者用 gdb 檢視 nslog 的輸出,定位和查詢 bug 變得非常困難。好在我們可以通過重定向,將標準的錯誤輸出stderr定向到檔案。

讓我們看下這段**,它的作用就是在程式內部的資料夾 documents 中新建乙個名為 decrypt.log 的檔案,並且將所有的 stderr 輸入到 decrypt.log

檔案中。如此一來所有關於 stderr 的輸出都將被重定向到 decrypt.log,在 gdb 中你將無法再看到這些資訊。

選擇 xcode->windows->organizer,找到你的裝置,在 summary 一欄中找到你的程式,將其展開,點選右邊的箭頭,這樣程式內部的所有資料夾都將匯出到你所指定的位置。organizer 左邊一欄的 projects&sources 展開便能找到這個檔案。

關於 printf, fprintf 和 nslog:

可能你大量使用了外部的 c 庫,它們以 printf 或者 fprintf 來輸出資訊 ,那麼它們的區別又是什麼?標準的 printf 是將除錯資訊輸入到標準輸出流 stdout,也就是說你用上面提供的函式是無法將此重定向的,你必須

reopen([logpath cstringusingencoding:nsasciistringencoding], "w+", stdout);

而 fprintf 則可以指定你所要輸出的除錯資訊的位置,包括 stdout、stderr 甚至是一般的檔案。這裡我們輸出到 stderr

fprintf(stderr, "hello\n");

nslog 本質上其實也是將除錯資訊輸出到 stderr,但與 fprintf 不同它還有些不一樣的特性。我們在使用 xcode 進行除錯的時候無論採用哪種方式輸出錯誤資訊總是第一時間重新整理在螢幕上,但定向到檔案卻有所不同。nslog 總是能第一時間寫到檔案,而 printf 或 fprintf 似乎將是資訊儲存在快取中,等待某種契機或者訊號才會將資訊寫到檔案中。如此一來辛苦準備的除錯資訊卻可能因為程式的崩潰而什麼也無法看到。所以我們可以通過 fflush 來強制它進行重新整理。如下,我們強制重新整理 stderr

除錯日誌輸出假想

除錯的時候在每個函式中都輸出log資訊是很好的一件事情,但是這樣的 太多了,又影響閱讀,如果能用乙個巨集來幹這樣的事情,那應該不錯。下面這個巨集是利用區域性物件的生命期來實現的。可以實現對函式入口和出口的列印,以及對關注變數值的列印,引數定義成巨集,可以列印任意型別的變數。這裡內容不是很完善,待補充...

IOS除錯 斷點除錯以及動態輸出

斷點除錯,是最常用最簡單的一種除錯方式,可以一步步跟蹤程式執行的流程,得到變數的值,快速的找到錯誤的原因。斷點的操作非常簡單,下面通過幾張圖來介紹一下如何新增 刪除 編輯以及使用斷點。設定全域性斷點 異常斷點 當遇到錯誤,debug程式會自動定位到棧底資訊,即跳到出錯 所在行。設定條件斷點,當滿足條...

iOS真機除錯列印並儲存控制台輸出日誌

檢視專案的輸出日誌有下面兩種情況 1 如果是模擬器或者 真機連線xcode的時候就可以直接在控制台列印log,檢視輸出日誌 2 如果是真機除錯同時不能連線xcode的時候就不能直接在xcode的控制台檢視輸出日誌了,但是程式還是會執行那些log的,如果要檢視這些日誌,我們就可以把輸出日誌儲存到沙盒的...