如何知道何时可以忽略所有exception断点上的__cxa_throw?

我在Xcode 4.5.1上。 我认为这是我看到的比较新的行为。

我更喜欢在启用“所有exception”断点的情况下开发和testing我的项目。

我已经遇到了一个场景,我正在将缩略图图像加载到tableview中的单元格,在那里我得到一个__cxa_throwexception。 当我点击“继续执行程序”button,Xcode继续其快乐的方式。 我得到缩略图。 应用程序似乎工作正常。 我正在寻找一些关于如何确定这是否安全可以忽略的提示。 就像也许一些理解栈跟踪的指针? 或者是其他东西?

以下是代码片段:

NSString *imageStr = item.thumbURL; imageStr = [imageStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *imageURL; if (![imageStr isEqualToString:@""]) { imageURL = [NSURL URLWithString:imageStr]; NSLog(@"imageURL: %@",imageURL); if (imageURL == nil) { NSLog(@"imageUrl was nil for string: %@",imageStr); } else { UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; //spinner.frame = CGRectMake(cell.imageView.frame.size.width/2,cell.imageView.frame.origin.y + cell.imageView.frame.size.height/2,cell.imageView.frame.size.width,cell.imageView.frame.size.height); spinner.frame = CGRectMake(10,20,40,40); [spinner startAnimating]; [cell addSubview:spinner]; dispatch_queue_t downloadQueue = dispatch_queue_create("thumbnail downloader", NULL); dispatch_async(downloadQueue, ^{ NSLog(@"Network request for tour_thumb image: %@",imageStr); UIImage *img = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:imageURL]]; dispatch_async(dispatch_get_main_queue(), ^{ [spinner removeFromSuperview]; UIImageView *imgView=[[UIImageView alloc] initWithFrame:CGRectMake(8, 8, cell.contentView.frame.size.width/2 - 16, cell.contentView.frame.size.height - 16)]; imgView.image = img; [cell.contentView addSubview:imgView]; }); }); dispatch_release(downloadQueue); } } 

以下是我在堆栈跟踪中看到的内容:

 #0 0x34a9c524 in __cxa_throw () #1 0x387014ce in AddChildNode(XMP_Node*, XML_Node const&, char const*, bool) () #2 0x38700d22 in RDF_LiteralPropertyElement(XMP_Node*, XML_Node const&, bool) () #3 0x3870094e in RDF_PropertyElementList(XMP_Node*, XML_Node const&, bool) () #4 0x38700608 in ProcessRDF(XMP_Node*, XML_Node const&, unsigned int) () #5 0x3871480a in XMPMeta::ParseFromBuffer(char const*, unsigned int, unsigned int) () #6 0x387095c0 in WXMPMeta_ParseFromBuffer_1 () #7 0x38725578 in TXMPMeta<std::string>::ParseFromBuffer(char const*, unsigned int, unsigned int) () #8 0x387254de in TXMPMeta<std::string>::TXMPMeta(char const*, unsigned int) () #9 0x38722b70 in CreateMetadataFromXMPDataInternal(char const*, unsigned long, unsigned int) () #10 0x38739a50 in readXMPProperties () #11 0x386a01fc in readXMPData () #12 0x3868cec8 in initImageJPEG () #13 0x3868c2ee in _CGImagePluginInitJPEG () #14 0x3867e274 in makeImagePlus () #15 0x3867ddde in CGImageSourceCreateImageAtIndex () #16 0x38e117b6 in _UIImageRefFromData () #17 0x38e116c6 in -[UIImage initWithData:] () #18 0x0004cb0a in __57-[ViewController tableView:cellForRowAtIndexPath:]_block_invoke_0 at ViewController.m:335 #19 0x313fc792 in _dispatch_call_block_and_release () #20 0x313ffb3a in _dispatch_queue_drain () #21 0x313fd67c in _dispatch_queue_invoke () #22 0x31400612 in _dispatch_root_queue_drain () #23 0x314007d8 in _dispatch_worker_thread2 () #24 0x394767f0 in _pthread_wqthread () #25 0x39476684 in start_wqthread () 

这显然在实现中很深,如果C ++exception决定使用exception来在内部发送错误,那么C ++exception可以成为正常stream程的一部分。

如果你自己没有编写任何C ++,那么忽略它安全的。

只是陷入标准的Objective-Cexception:

 objc_exception_throw 

到这里:

在这里输入图像说明

做到这一点:

在这里输入图像说明

要这样做:

在这里输入图像说明

进入这个:

在这里输入图像说明

您仍然可以获得添加断点的很多好处,但不会让您的应用程序崩溃,因为您可能无法负责任何事情。 现在,如果你正在使用C ++,那么你更好的担心。