令人困惑的LLDB输出

时间:2013-07-22 08:39:57

标签: objective-c c lldb

我的C知识可能存在漏洞,但我对此为何发生了一些疑惑。

(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
    }
}

谢谢, 安迪

1 个答案:

答案 0 :(得分:2)

lldb问题似乎与Objective C integer comparison error中的问题完全相同:

卡尔·诺鲁姆在回答中说:

  

确认 - 这是lldb IR解释器中的一个错误。

     

以下是修补程序修补程序的链接:http://lists.cs.uiuc.edu/pipermail/lldb-commits/Week-of-Mon-20130520/008569.html


关于你的代码,我试图在没有成功的情况下重现这个错误:

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

也许您应该尝试使用NSLog进行调试(特别是在输入函数后,lineGroupString的值是多少?)。