2016-04-15 98 views
1

這兩個整數,其中一個從NSUserDefaults以integerForKey:方法加載。有沒有人看過這樣的行爲? 結果顯然應該是2,還是太晚了,我應該睡覺? 這是如此怪異....Xcode奇怪的調試器問題?

enter image description here

+0

如果使用'p'而不是'po',會發生什麼? 'po'的歷史意思是「打印對象」,並且這些變量和表達式「sharingCampaignIterations%nag_every'都不是一個對象。 –

+0

它給出了相同的結果... – Ted

+1

有趣的是,我也可以在一個簡單的測試應用程序中重現這一點,它只有'int n = 2; int m = 3;',在Xcode 7.3中使用lldb。看起來你發現了一個錯誤。 –

回答

2

是的,這是一個錯誤,請與lldb.llvm.org Bugzilla的備案。

注意,po只是簡寫爲:運行基本的「expr」命令以將參數計算爲表達式,然後對結果調用description方法。

表達式命令的工作方式是,如果表達式足夠簡單以解釋,我們就這樣做,否則我們將表達式插入並將其插入到對手中並運行它。該錯誤在解釋器中,顯然它不能使用帶符號整數的mod。無符號整數類型正常工作,並且JIT結果也是正確的。例如,在庫爾特的例子中:

(lldb) expr n % m 
(int) $5 = 0 

這是不對的!但是:

(lldb) expr (void) printf ("%d\n", n % m) 
2 
(lldb) 

因爲表達涉及到函數調用,我們無法解釋它,只好JIT它,這得到了計算正確。這也是一個相當大的解決方法,但也請提交一個錯誤。