我對差異感到困惑強調了以下紅色:NSDate的LLDB顯示不一致?
如何走到這非常相同的NSDate對象被顯示在調試窗格中BST,但在LLDB終端GMT時問「」 「日期」」的打印說明?
這是在Xcode 4.6.1
我對差異感到困惑強調了以下紅色:NSDate的LLDB顯示不一致?
如何走到這非常相同的NSDate對象被顯示在調試窗格中BST,但在LLDB終端GMT時問「」 「日期」」的打印說明?
這是在Xcode 4.6.1
一個NSDate
代表了一個特定的時刻,沒有任何考慮的是什麼人打電話的那一刻。如果你看一下NSDate
,你「將會注意到甚至沒有hour
,minute
或second
屬性,更不用說timeZone
屬性。時區是NSCalendar
的一個功能,用於解釋顯示的NSDate
。 (您可能更熟悉NSDateFormatter
;它在內部使用的NSCalendar
解釋日期。)
在這種情況下,Xcode中恰好配置變量面板日曆的方式有點不同,從LLDB如何配置一個用於調試安慰。我不得不猜測調試控制檯調用-description
,它始終使用UTC,而變量面板使用尊重當前時區的日期格式化程序。 (你的Mac被配置爲使用BST,對不對?如果不是,這是一個奇怪的選擇......)
布倫特的回覆是好的 - 但我想具體解決一個細節。 lldb內置了許多常見類型的格式化程序,包括NSDate
。如果在調試器控制檯中執行了p date
,則會得到與您在本地窗口中看到的相同的輸出。當您在變量上單擊/按住Control鍵並單擊「打印說明」時,它相當於在控制檯中寫入po date
- 正如Brent所說,它調用-description
方法。
這不是一個控制檯vrs。當地人窗口差異,或Xcode vrs。 lldb區別。一種訪問方法是使用lldb內置的數據格式化器,一種是調用-description
。
這很有趣。謝謝你提到它。 – 2013-03-24 09:06:23
btw,一個非常重要的實現細節是lldb實際調用'_NSPrintForDebugger',它將一個對象指針作爲其參數,用於'po'命令。 gdb做了同樣的事情。還有一個'_CFPrintForDebugger'函數。 – 2013-03-26 21:34:20
是的。 DST在3月底開始使用,因此20130402正好在......我只是感到困惑,Xcode不能同意使用的時區/日曆,具體取決於您查看的窗格... – verec 2013-03-23 01:50:31
調試控制檯只是一味地調用'-description',因爲這是你想要將對象轉換爲字符串進行打印時的操作。變量面板更聰明:它查看對象並確定它是一個日期,所以它想以最有用的方式顯示它。這兩個地方顯示陣列和字典更加不同。 – 2013-03-23 01:53:11