log.info("name變數的值為:" + name); // Java
NSLog(@"name變數的值為:%@", name); // Objective-C
這個作法有什麼問題嗎?簡單講,對於閱讀程式碼的人,多少會造成閱讀感的不流暢;其次, log 的列印會影響程式的執行速度、增加不必要的大量歷史記錄。(除非執行環境有被妥善的區分)
至於習於使用 preprocessor 的程式風格,例如以 #if .. #endif 來區分執環境…這種程式碼就更…醜。個人覺得要激怒程式碼未來的維護者(也可能是自己),這個風格的效果應該不錯。
Xcode 的中斷點機制能以更好的方式來滿足上面的需求。
我們可以在建置中斷點後,在其上方以右鍵/雙指點擊的方式呼叫功能選單,並選擇「Edit Breakpoint ...」後,我們可以透過:
1. 將 Action 選擇為「Log Message」
2. 以上面的例子為例,就在 Action 下方文字列輸入:
name變數的值為:@name@
3. 選擇「Log Message to console」
4. 選擇 Options 為「Automatically continue after evaluating」
完成以上步驟後,在執行過程中就會將 log 資訊列印到 console ,效果和加上列印 log 敘述是一樣的,而且不會有因為加上該敘述造成程式碼的閱讀負壓。
故事只講完開場,這篇文章要關注的重點是接下來的內容:
在最基本的要求下,我們會把程式碼在 iteration / refactoring 的過程中,增量式地保存到 repository 裡。(目前 Xcode 預設使用 Git )
那麼,我們在上文中,對於中斷點設置的詳細內容,會跟著 commit 到 Git 裡,然後當下一次不管誰、在哪一台主機裡將程式碼 clone/pull 時,他得到的程式碼中,還會含帶該中斷點的設定嗎?
答案是:如果使用 Xcode 提供的 commit 功能選單,來進行程式碼保存的操作時,將不會把中斷點設置資訊一併存入 Git。更具體地說,在專案的
專案名稱.xcodeproj /xcuserdata/使用者名稱.xcuserdatad/xcdebugger/ 目錄裡
的 .xcbkptlist 檔,並沒有被保存至 Git 的原因。
解決方式:
自行輸入 git add 及 git commit 。這樣 xcbkptlist 檔才會被存到 Git,而中斷點的設定才具被「可攜性」哦!
對了,Xcode 的中斷點設置,其功能還不只如此!要讓它講話、唱歌都行。
這個就讓讀者自行 play 一下囉 ~
3. 選擇「Log Message to console」
4. 選擇 Options 為「Automatically continue after evaluating」
完成以上步驟後,在執行過程中就會將 log 資訊列印到 console ,效果和加上列印 log 敘述是一樣的,而且不會有因為加上該敘述造成程式碼的閱讀負壓。
故事只講完開場,這篇文章要關注的重點是接下來的內容:
在最基本的要求下,我們會把程式碼在 iteration / refactoring 的過程中,增量式地保存到 repository 裡。(目前 Xcode 預設使用 Git )
那麼,我們在上文中,對於中斷點設置的詳細內容,會跟著 commit 到 Git 裡,然後當下一次不管誰、在哪一台主機裡將程式碼 clone/pull 時,他得到的程式碼中,還會含帶該中斷點的設定嗎?
答案是:如果使用 Xcode 提供的 commit 功能選單,來進行程式碼保存的操作時,將不會把中斷點設置資訊一併存入 Git。更具體地說,在專案的
專案名稱.xcodeproj /xcuserdata/使用者名稱.xcuserdatad/xcdebugger/ 目錄裡
的 .xcbkptlist 檔,並沒有被保存至 Git 的原因。
解決方式:
自行輸入 git add 及 git commit 。這樣 xcbkptlist 檔才會被存到 Git,而中斷點的設定才具被「可攜性」哦!
對了,Xcode 的中斷點設置,其功能還不只如此!要讓它講話、唱歌都行。
這個就讓讀者自行 play 一下囉 ~
沒有留言:
張貼留言