什麼會導致我的程序在Xcode上暫停?我沒有設置斷點,當我執行我的代碼時,gdb提示符出現在命令行中。有沒有人對此有一個快速建議。 程序本身不會崩潰並返回正確的值。它只是不會停止執行。即使沒有設置斷點,GDB也會在XCode中暫停程序
告訴你我正在做什麼。我正在通過Objective-C 2.0書中的Stephen Kochan編程進行一些練習。發生這種情況的練習是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;
}
的事情是,我不希望完全禁用斷點。我只是不明白爲什麼在這種情況下執行被暫停,因爲我沒有設置任何斷點。我不想禁用斷點,因爲最終我想使用它們。只是這個特殊情況出乎意料地暫停了。
你試過簡單的重啓嗎?在很多情況下,XCode可能會對此產生困惑(我曾經有類似的事情發生過),並且重新啓動修復了它。這不是真正的答案(例如是什麼原因),但也可以解決它? – makdad 2010-12-07 00:40:18
@phooze我只是試過了,它仍然不會停止執行。我可以運行其他課程,他們不會暫停。 – 2010-12-07 00:42:05
這些步驟如何:http://stackoverflow.com/questions/1067689/how-to-disable-all-breakpoints-in-xcode – makdad 2010-12-07 00:43:54