Objective-c EXC_BREAKPOINT(SIGTRAP)异常,无需追溯到iPhone应用程序

时间:2012-05-20 20:27:59

标签: iphone objective-c

我试过了 (1)清洁打印文件夹,
(2)从模拟器和iphone中删除应用程序,
(3)重启,
(4)并启用NSZombieEnabled但它似乎没有做任何事情 (5)使用调试器lldb和gdb
(6)和gaurd malloc

我有xcode 4.3.2。这个错误发生在模拟器和我的iPhone上。 (在模拟器上显示EXC_BAD_INSTRUCTION code=i386 subcode=0x0,在设备上显示EXC_BREAKPOINT (SIGTRAP) 这是两个崩溃日志:

http://pastie.org/3941419

http://pastie.org/3941427

在日志中打印:

Trace/BPT trap: 5
Segmentation fault: 11

正如您在崩溃中看到的那样,我的任何ViewControllers都没有回溯。在询问(link)之前我做了很多谷歌搜索,但很多其他人(link)有这个错误的追溯到他们的应用程序。这个应用程序的常见原因是什么?我应该从哪里开始寻找错误?我没有一件事可以重现,只需运行一段我的代码10次,它至少会崩溃一次。谢谢!

编辑: 继承了一些代码

outputPipe = [[NSPipe alloc] init];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getDataOut:) name:NSFileHandleReadToEndOfFileCompletionNotification object:[outputPipe fileHandleForReading]];

[[NSNotificationCenter defaultCenter] removeObserver:self name:NSFileHandleReadToEndOfFileCompletionNotification object:[outputPipe fileHandleForReading]];

我稍后会在代码中发布outputPipe。

编辑2:更改[NSPipe管道];至[[NSPipe alloc] init];没有解决它。

在观察者之间切换的代码:

 buttondone.title=@"Done";
    //dlog(@"last output notification inbound");
    stdoutisdone=YES;

    [[NSNotificationCenter defaultCenter] removeObserver:self name:NSFileHandleReadCompletionNotification object:[outputPipe fileHandleForReading]];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getDataOut:) name:NSFileHandleReadToEndOfFileCompletionNotification object:[outputPipe fileHandleForReading]];

    [[outputPipe fileHandleForReading] readToEndOfFileInBackgroundAndNotify];

1 个答案:

答案 0 :(得分:0)

我通过删除对第二个NSFileHandle方法的调用来解决它。所以,而不是:

 [[NSNotificationCenter defaultCenter] removeObserver:self name:NSFileHandleReadCompletionNotification object:[outputPipe fileHandleForReading]];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getDataOut:) name:NSFileHandleReadToEndOfFileCompletionNotification object:[outputPipe fileHandleForReading]];

[[outputPipe fileHandleForReading] readToEndOfFileInBackgroundAndNotify];

我用这个:

NSString * output=[[outputPipe fileHandleForReading] readToEndOfFile];

它会产生一点UI延迟,可以在任务完成后通过调用readInBackgroundAndNotify一次或两次来减少。如果有人有更好的解决方案,我会将你的标记作为答案。