gpt4 book ai didi

objective-c - 运行代码返回垃圾;在调试器中输入会返回正确的结果

转载 作者:行者123 更新时间:2023-12-03 17:06:56 25 4
gpt4 key购买 nike

下面是我设置断点后的代码(我添加了强制转换,以完全匹配我在 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 ()

最佳答案

您似乎没有执行以下检查,而在使用 addedRefOrder 之前需要执行此检查。

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

如果它是 NSNotFound,那么它不是垃圾值,我不会质疑这个结果并在查看代码中的其他位置之前中断调试器。是什么让你觉得这是不对的?通常这些事情都是我们自己的错。您可能忽略了此代码片段范围之外的逻辑问题。

如果上述情况成立,请检查您的代码以找出它不在数组中的原因。

需要检查的一件事是 isEqual: 的实现是否适用于addedRef 对象的类。因为这就是数组确定对象是否在数组中的方式。

而且我不相信调试器中第一行的结果。您刚刚第二次调用了所有这些方法,这些调用中可能发生的任何事情都会影响返回值。也许当你第二次调用它时,由于一些副作用,它实际上在数组中。

这也可能是一些并发问题,如果您不使用线程,您应该能够轻松排除该问题。如果你是,那么我会看看那里的常见嫌疑人。

关于objective-c - 运行代码返回垃圾;在调试器中输入会返回正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5201728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com