2013-03-23 82 views
1

我對差異感到困惑強調了以下紅色:NSDate的LLDB顯示不一致?

enter image description here

如何走到這非常相同的NSDate對象被顯示在調試窗格中BST,但在LLDB終端GMT時問「」 「日期」」的打印說明?

這是在Xcode 4.6.1

回答

4

一個NSDate代表了一個特定的時刻,沒有任何考慮的是什麼人打電話的那一刻。如果你看一下NSDate,你「將會注意到甚至沒有hour,minutesecond屬性,更不用說timeZone屬性。時區是NSCalendar的一個功能,用於解釋顯示的NSDate。 (您可能更熟悉NSDateFormatter;它在內部使用的NSCalendar解釋日期。)

在這種情況下,Xcode中恰好配置變量面板日曆的方式有點不同,從LLDB如何配置一個用於調試安慰。我不得不猜測調試控制檯調用-description,它始終使用UTC,而變量面板使用尊重當前時區的日期格式化程序。 (你的Mac被配置爲使用BST,對不對?如果不是,這是一個奇怪的選擇......)

+0

是的。 DST在3月底開始使用,因此20130402正好在......我只是感到困惑,Xcode不能同意使用的時區/日曆,具體取決於您查看的窗格... – verec 2013-03-23 01:50:31

+2

調試控制檯只是一味地調用'-description',因爲這是你想要將對象轉換爲字符串進行打印時的操作。變量面板更聰明:它查看對象並確定它是一個日期,所以它想以最有用的方式顯示它。這兩個地方顯示陣列和字典更加不同。 – 2013-03-23 01:53:11

3

布倫特的回覆是好的 - 但我想具體解決一個細節。 lldb內置了許多常見類型的格式化程序,包括NSDate。如果在調試器控制檯中執行了p date,則會得到與您在本地窗口中看到的相同的輸出。當您在變量上單擊/按住Control鍵並單擊「打印說明」時,它相當於在控制檯中寫入po date - 正如Brent所說,它調用-description方法。

這不是一個控制檯vrs。當地人窗口差異,或Xcode vrs。 lldb區別。一種訪問方法是使用lldb內置的數據格式化器,一種是調用-description

+0

這很有趣。謝謝你提到它。 – 2013-03-24 09:06:23

+0

btw,一個非常重要的實現細節是lldb實際調用'_NSPrintForDebugger',它將一個對象指針作爲其參數,用於'po'命令。 gdb做了同樣的事情。還有一個'_CFPrintForDebugger'函數。 – 2013-03-26 21:34:20