2011-03-05 77 views
1

這裏之後,我設置一個斷點的代碼(我加入了強制類型究竟比賽我在GDB類型,但它有沒有他們相同的結果):運行代碼返回垃圾;打字調試器返回正確的結果

NSUInteger addedRefOrder = (NSUInteger)[(NSArray*)[sourceMap tileRefsAtX:[addedRef x] y:[addedRef y]] indexOfObject:addedRef]; 

下面是我在GDB類型:

(gdb) print (NSUInteger)[(NSArray*)[sourceMap tileRefsAtX:[addedRef x] y:[addedRef y]] indexOfObject:addedRef] 
$2 = 1 
(gdb) print addedRefOrder 
$3 = 9223372036854775807 

爲了記錄在案,我相當肯定,後者的價值NSNotFound。這個問題到底意味着什麼?我怎麼開始調試呢?

編輯:我是積極的對象是在數組中。返回了NSNotFound,但它不正確。下面是在同一個應用程序在別處另一種情況:即行後

NSPoint irisPoint = NSMakePoint([currentObject x], [currentObject y]); 

斷點右:

(gdb) print irisPoint 
$1 = { 
    x = 4301764096, 
    y = 4301764096 
} 
(gdb) print [currentObject x] 
$2 = 4 
(gdb) print NSMakePoint([currentObject x], [currentObject y]) 
Program received signal EXC_BAD_ACCESS, Could not access memory. 
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000018 
0x00007fff885e010a in objc_msgSend() 

回答

0

原來的問題是,xyNSInteger類型,而編譯器遇到了麻煩,從其他CGFloatxy方法保持平直。

最後的解決方案是明確地將currentObject轉換爲正確的類型。

2

看來你沒有做以下檢查,您使用addedRefOrder之前需要。

if (addedRefOrder == NSNotFound) { 
    NSLog(@"Object %@ not found in array %@", addedRef, array); 
} 

如果是NSNotFound,那麼它是不是垃圾價值,我不會質疑這個結果並在代碼跳槽之前打出來的調試器。是什麼讓你覺得這是不對的?通常這些事情是我們自己的錯。您可能忽略了此代碼段範圍之外的邏輯問題。

如果以上情況屬實,請檢查您的代碼以確定它爲什麼不在數組中。

要檢查的一件事是您的isEqual實現:對於addedRef對象的類。因爲這就是數組如何確定對象是否在數組中。

另外我不會相信調試器中第一行的結果。您剛剛第二次調用了所有這些方法,並且這些調用中可能會有影響返回值的任何事情。也許第二次調用它時,由於一些副作用,它實際上是在陣列中。

它也可能是一些併發問題,如果你不使用線程,你應該能夠輕鬆排除。如果你是那麼我會看那裏的通常的嫌疑人。

+0

該對象位於數組中。 – andyvn22 2011-03-11 00:13:30