2013-07-22 3 views
3

Возможно, в моем знании C есть отверстие, но я немного смущен, почему это происходит.Запутанный вывод LLDB

(lldb) p lineGroup 
(NSInteger) $17 = -1 
(lldb) p (lineGroup > 4) 
(bool) $18 = true 
(lldb) p (lineGroup < 0) 
(bool) $19 = false 
(lldb) p (-1 < 0) 
(bool) $20 = true 
(lldb) p ((int)lineGroup < 0) 
(bool) $21 = false 
(lldb) p ((int)lineGroup > 4) 
(bool) $22 = true 
(lldb) 

Переменная lineGroup назначается следующим образом:

- (void)gotLineGroupInformation:(NSString *)lineGroupString 
{ 
    NSInteger lineGroup = [lineGroupString integerValue]; 
    if(lineGroup >= 0) 
    { 
     // Always gets called 
    } 
    else 
    { 
     // Never gets called 
    } 
} 

Спасибо, Энди

+0

В какой архитектуре вы собрали? Если 64-разрядный, NSInteger будет 64-битным, но int будет 32-битным. –

+1

Ваш вопрос только о явно ошибочном выходе отладчика? Или ваш код работает не так, как ожидалось? –

+0

Возможный дубликат [Целевая ошибка сравнения Objective C] (http://stackoverflow.com/questions/16725029/objective-c-integer-comparison-error) –

ответ

2

Вопрос lldb, кажется, точно такой же, как и в Objective C integer comparison error:

Карл Норум сказал в его ответе:

Подтверждено - это ошибка в ИК-интерпретаторе lldb.

Вот ссылка на патч, который исправляет это: http://lists.cs.uiuc.edu/pipermail/lldb-commits/Week-of-Mon-20130520/008569.html


Что касается кода, я пытался воспроизвести ошибку, не Succes с этим тестом:

NSString *lineGroupString = @"-1"; 
NSInteger lineGroup = [lineGroupString integerValue]; 
if(lineGroup >= 0) 
{ 
    NSLog(@"positive"); 
} 
else 
{ 
    NSLog(@"negative"); // This log is correctly called every time 
} 

возможно, вы должны попробуйте отладить с NSLog для этого (в частности, что такое значение lineGroupString сразу после ввода функции?).

+0

Да, это проблема с дублированием «Целочисленная ошибка сравнения Objective C ». lldb-179 в Xcode 4.6.x имеет ошибку, которую Энди сообщает здесь; он фиксируется в верхней части дерева lldb svn sources. Любая версия Xcode, прошедшая мимо Xcode 4.6.x, будет содержать исправление. –

 Смежные вопросы

  • Нет связанных вопросов^_^