Что может вызвать приостановку работы моей программы в Xcode? У меня не установлены точки останова, и когда я выполняю свой код, в командной строке появляется приглашение gdb. У кого-нибудь есть быстрый совет для этого.
Сама программа не вылетает и возвращает правильные значения. Это просто не остановит исполнение.
Расскажу немного о том, над чем я работаю. Я выполняю некоторые упражнения из книги Стивена Кочана по программированию в Objective-C 2.0. Упражнение, где это произошло, 8.6. В упражнении предлагается создать простой метод, который создаст объект прямоугольника с пересекающимися данными между двумя другими прямоугольниками.
Моя главная выглядит так:
#import "Rectangle.h"
#import "XYPoint.h"
#import <stdio.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Rectangle *myRectangle = [[Rectangle alloc] init];
XYPoint *myPoint = [[XYPoint alloc] init];
Rectangle *secondRectangle = [[Rectangle alloc] init];
XYPoint *secondPoint = [[XYPoint alloc] init];
Rectangle *intersectRectangle;
[myRectangle setWidth:100 andHeight:180];
[myPoint setX:400 andY:300];
[myRectangle setOrigin:myPoint];
[secondRectangle setWidth:250 andHeight:75];
[secondPoint setX:200 andY:420];
[secondRectangle setOrigin:secondPoint];
intersectRectangle = [myRectangle intersect:secondRectangle];
NSLog(@"Width: %i, Height: %i", intersectRectangle.width, intersectRectangle.height);
NSLog(@"With translated origin (%i, %i)", intersectRectangle.origin.x, intersectRectangle.origin.y);
[myRectangle release];
[myPoint release];
[secondRectangle release];
[secondPoint release];
[intersectRectangle release];
[pool drain];
return 0;
}
И метод для класса, подобный следующему:
-(Rectangle *)intersect:(Rectangle *)rect{
if (intersectingRect) {
[intersectingRect release];
}
intersectingRect = [[Rectangle alloc] init];
XYPoint *intersectPt = [[XYPoint alloc] init];
int intersectWidth = 0;
int intersectHeight = 0;
int intersectX = 0;
int intersectY = 0;
if(origin.x < rect.origin.x) {
if ((origin.x + width) > rect.origin.x) {
if ((origin.x + width) > (rect.origin.x+rect.height)) {
if (origin.y < rect.origin.y) {
if ((origin.y+height) > rect.origin.y) {
if ((origin.y + height) > (rect.origin.y + rect.height)) {
intersectWidth = rect.width;
intersectHeight = rect.height;
intersectX = rect.origin.x;
intersectY = rect.origin.y;
} else {
intersectWidth = rect.width;
intersectHeight = origin.y + height - rect.origin.y;
intersectX = rect.origin.x;
intersectY = rect.origin.y;
}
} else {
intersectWidth = 0;
intersectHeight = 0;
intersectX = 0;
intersectY = 0;
}
} else if ((rect.origin.y + rect.height) > origin.y) {
if ((rect.origin.y + rect.height) > (origin.y + height)) {
intersectWidth = rect.width;
intersectHeight = height;
intersectX = rect.origin.x;
intersectY = origin.y;
} else {
intersectWidth = rect.width;
intersectHeight = rect.origin.y + rect.height - origin.y;
intersectX = rect.origin.x;
intersectY = origin.y;
}
} else {
intersectWidth = 0;
intersectHeight = 0;
intersectX = 0;
intersectY = 0;
}
} else if (origin.y < rect.origin.y) {
if ((origin.y + height) > rect.origin.y) {
if ((origin.y + height) > (rect.origin.y + rect.height)) {
intersectWidth = origin.x + width - rect.origin.x;
intersectHeight = rect.height;
intersectX = rect.origin.x;
intersectY = rect.origin.y;
} else {
intersectWidth = origin.x + width - rect.origin.x;
intersectHeight = origin.y + height - rect.origin.y;
intersectX = rect.origin.x;
intersectY = rect.origin.y;
}
} else {
intersectWidth = 0;
intersectHeight = 0;
intersectX = 0;
intersectY = 0;
}
} else if ((rect.origin.y + rect.height) > origin.y) {
if ((rect.origin.y + rect.height) < (origin.y + height)) {
intersectWidth = origin.x + width - rect.origin.x;
intersectHeight = rect.origin.y + rect.height - origin.y;
intersectX = rect.origin.x;
intersectY = origin.y;
} else {
intersectWidth = origin.x + width - rect.origin.x;
intersectHeight = height;
intersectX = rect.origin.x;
intersectY = origin.y;
}
} else {
intersectWidth = 0;
intersectHeight = 0;
intersectX = 0;
intersectY = 0;
}
} else {
intersectWidth = 0;
intersectHeight =0;
intersectX = 0;
intersectY = 0;
}
} else if (origin.x < (rect.origin.x + rect.width)) {
if ((origin.x + width) > (rect.origin.x + rect.width)) {
if (origin.y < rect.origin.y) {
if ((origin.y+height) > rect.origin.y) {
if ((origin.y + height) > (rect.origin.y + rect.height)) {
intersectWidth = rect.origin.x + rect.width - origin.x;
intersectHeight = rect.height;
intersectX = origin.x;
intersectY = rect.origin.y;
} else {
intersectWidth = rect.origin.x + rect.width - origin.x;
intersectHeight = origin.y + height - rect.origin.y;
intersectX = origin.x;
intersectY = rect.origin.y;
}
} else {
intersectWidth = 0;
intersectHeight = 0;
intersectX = 0;
intersectY = 0;
}
} else if (origin.y < (rect.origin.y + rect.height)) {
if ((origin.y + height) > (rect.origin.y + rect.height)) {
intersectWidth = rect.origin.x + rect.width - origin.x;
intersectHeight = rect.origin.y + rect.height - origin.y;
intersectX = origin.x;
intersectY = origin.y;
} else {
intersectWidth = rect.origin.x + rect.width - origin.x;
intersectHeight = height;
intersectX = origin.x;
intersectY = origin.y;
}
} else {
intersectWidth = 0;
intersectHeight = 0;
intersectX = 0;
intersectY = 0;
}
} else if (origin.y < rect.origin.y) {
if ((origin.y + height) > rect.origin.y) {
if ((origin.y + height) > (rect.origin.y + rect.height)) {
intersectWidth = width;
intersectHeight = rect.height;
intersectX = origin.x;
intersectY = rect.origin.y;
} else {
intersectWidth = width;
intersectHeight = origin.y + height - rect.origin.y;
intersectX = origin.x;
intersectY = rect.origin.y;
}
} else {
intersectWidth = 0;
intersectHeight = 0;
intersectX = 0;
intersectY = 0;
}
} else if (origin.y < (rect.origin.y + rect.height)) {
if ((origin.y + height) > (rect.origin.y + rect.height)) {
intersectWidth = width;
intersectHeight = rect.origin.y + rect.height - origin.y;
intersectX = origin.x;
intersectY = origin.y;
} else {
intersectWidth = width;
intersectHeight = height;
intersectX = origin.x;
intersectY = origin.y;
}
} else {
intersectWidth = 0;
intersectHeight = 0;
intersectX = 0;
intersectY = 0;
}
} else {
intersectWidth = 0;
intersectHeight = 0;
intersectX = 0;
intersectY = 0;
}
[intersectingRect setWidth:intersectWidth andHeight:intersectHeight];
[intersectPt setX:intersectX andY:intersectY];
[intersectingRect setOrigin:intersectPt];
return intersectingRect;
}
Дело в том, что я не хочу вообще отключать точки останова. Я просто не понимаю, почему в этом случае выполнение приостанавливается, поскольку я не устанавливаю никаких точек останова. Я не хочу отключать контрольные точки, потому что в конечном итоге я бы хотел их использовать. Именно этот конкретный случай неожиданно приостанавливается.