`

xcode4 设置调试错误信息小结【转】

 
阅读更多

方案1:NSZombieEnabled

先选中工程, 依次 "Product"-"Edit Scheme", 左栏选择"Run...", 右栏选中Arguments, 然后在Environment Variables下面添加以下三个属性, 设值为YES

NSDebugEnabled

NSZombieEnabled

NSAutoreleaseFreedObjectCheckEnabled

 

 

 有时候在程序出错的时候能准确定位到奔溃的那一行, 或者会给你下面这样的提示,而不仅仅是EXEC_BAD_ACCESS:

 

message sent to deallocated instance 0x126550

 

如果要查看上面地址的分配情况

开启MallocStackLogging(Xcode4勾选下MallocStackLogging就行)

出错时shell malloc_history pid address

另:有时候可以重载respondsToSelector可以帮你找到程序崩溃时最后执行的函数,然后排查.


 

方案2:添加全局断点


Xcode4可以很方便的添加全局的异常断点

 

方案3:中断和未捕获异常

 

1.未拦截信号来源:内核,其他程序,本身.

常见的两个信号:

1).EXC_BAD_ACCESS 试图访问非法内存,导致SIGBUS或者SIGSEGV信号 

2).未能拦截obj_exception_throw导致的SIGABRT信号.

2.方法

1).使用NSUncaughtionHandler安装一个handler拦截未拦截异常

2).使用signal函数安装一个handler拦截BSD信号.(SIGKILL[kill -9]和SIGSTOP[Control+z]无法拦截)

两个c函数

 

  1. void SignalHandler(int signal)  
  2. {  
  3. //中断信号  
  4. }  
  5.   
  6.   
  7. void uncaughtExceptionHandler(NSException *exception)  
  8. {  
  9. //未捕获异常  
  10. }  

 


安装(与全局异常断点冲突,当有这样的断点是,下面拦截函数失效)

  1. void InstallUncaughtExceptionHandler()  
  2. {  
  3.     NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);  
  4.     signal(SIGABRT, SignalHandler);  
  5.     signal(SIGILL, SignalHandler);  
  6.     signal(SIGSEGV, SignalHandler);  
  7.     signal(SIGFPE, SignalHandler);  
  8.     signal(SIGBUS, SignalHandler);  
  9.     signal(SIGPIPE, SignalHandler);  
  10. }  

3.具体实例

1.http://cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html

重点在于尝试继续运行程序

告诉用户那些因为这些未拦截的异常和信号导致的崩溃,或者自己记录,甚至可以避开这样导致的崩溃.不过,如果多个信号拦截了,这可能失效.

非常推荐看看这篇文章

2.http://parveenkaler.com/2010/08/11/crashkit-helping-your-iphone-apps-suck-less/

重点在于记录异常(之后返回主线程)

  1. - (void)pumpRunLoop  
  2. {  
  3.     self.finishPump = NO;  
  4.     CFRunLoopRef runLoop = CFRunLoopGetCurrent();  
  5.     CFArrayRef runLoopModesRef =     CFRunLoopCopyAllModes(runLoop);  
  6.     NSArray * runLoopModes = (NSArray*)runLoopModesRef;  
  7.     while (self.finishPump == NO)  
  8.     {  
  9.         for (NSString *mode in runLoopModes)  
  10.         {  
  11.             CFStringRef modeRef = (CFStringRef)mode;  
  12.             CFRunLoopRunInMode(modeRef, 1.0f/120.0f, false);  // Pump the loop at 120 FPS  
  13.         }  
  14.     }  
  15.     CFRelease(runLoopModesRef);  
  16. }  
分享到:
评论

相关推荐

    xcode16.1真机调试包

    《Xcode 16.1真机调试包详解与应用》 在iOS开发领域,Xcode作为Apple官方的集成开发环境(IDE),是每一位开发者必备的工具。Xcode 16.1版本的发布,为开发者带来了更多优化和新特性,特别是针对真机调试功能的改进...

    Xcode 15.4 真机调试

    8. **错误与崩溃日志**:真机调试时,Xcode会记录设备上的错误和崩溃信息,方便定位问题原因。这些日志可以通过Xcode的Console工具查看,也可以导出用于离线分析。 9. **权限管理**:在真机上,开发者可以测试应用...

    xcode 15.4 真机调试包

    4. **真机调试**:真机调试是Xcode的核心功能之一,它让开发者能够在真实设备上测试应用程序,以便更准确地模拟用户行为和设备性能。Xcode 15.4可能改进了设备连接的稳定性,以及调试过程中的性能监控和错误报告。 ...

    Xcode 13.5真机调试包

    每个版本的iOS系统都有对应的设备支持文件,这些文件包含了Xcode需要的调试信息和SDK,以便与不同版本的iOS设备进行通信。在Xcode中,当你选择一个特定的iOS版本进行真机调试时,就是依赖这些文件。 "13.5"这个...

    让 Xcode 支持真机调试 iOS14.2(beta)

    让 Xcode 支持真机调试 iOS14.2(beta) 打开 访达 (command + shift + G )前往文件夹 拷贝到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport目录下重启 Xcode 即可

    Xcode 14.1真机调试包

    同时,开发者需要在Xcode的偏好设置中添加他们的Apple Developer账户,以便能够安装和调试签名的应用程序。在进行真机调试时,开发者可以通过Xcode的调试工具,如断点、控制台输出、内存分析等来查找和修复代码中的...

    xcode ios 11.2调试包

    5. **错误调试**:当遇到运行时错误或警告时,查看Xcode的控制台输出和日志,可以帮助定位问题所在。 6. **自动化测试**:利用Xcode的UI测试框架(XCTest)编写自动化测试用例,以确保应用在iOS 11.2上的各种场景下...

    Xcode iOS 16真机调试包 开发调试

    4. **错误处理与崩溃报告**:在真机调试过程中,开发者要密切关注应用的错误日志和崩溃报告,及时发现并修复可能的问题。 5. **性能优化**:针对iOS 16的新特性,比如改进的后台刷新机制,开发者可以优化应用的后台...

    xcode 11.3真机调试包

    4. 设置断点:在代码中设置断点,当执行到这些位置时,程序会暂停,方便查看变量值、调用堆栈等信息。 5. 调试操作:在暂停状态下,你可以检查和修改变量值,单步执行代码,查看调用栈,使用条件断点等调试工具。 ...

    Xcode 14.0 真机调试包

    《Xcode 14.0 真机调试包详解》 在iOS应用开发领域,Xcode作为苹果官方的集成开发环境(IDE),扮演着至关重要的角色。Xcode 14.0的发布,为开发者提供了更为先进的工具和技术,使得在iOS 14平台上进行真机调试变得...

    Xcode 真机调试包 15.5系统

    3. **配置Xcode**:在Xcode的项目设置中选择正确的设备和目标iOS版本。 4. **运行和调试**:点击Xcode中的“运行”按钮,应用将被部署到设备上并开始调试。 总之,"Xcode 真机调试包 15.5系统"是为了帮助开发者解决...

    Xcode11.4真机调试包

    5. **调试设置**:在Xcode的运行配置中选择目标设备,开启必要的调试选项,如Breakpoints和Console输出。 总的来说,Xcode 11.4的真机调试功能为iOS开发者提供了强大的支持,通过充分利用这些特性,开发者可以更...

    Xcode13.1真机调试包

    Xcode 12.3真机调试包,操作如下: 前往--应用程序/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport文件夹,拖到文件目录下之后重启 Xcode 即可。

    iOS真机调试包(Xcode)

    5. **调试**:在设备上操作应用时,Xcode的调试工具栏会显示相应的日志输出、变量值、断点等信息。你可以使用这些工具进行代码级调试,比如设置断点、查看堆栈信息、实时修改变量值等。 6. **问题排查**:如果遇到...

    Xcode 15.0真机调试包.zip

    iOS 15.0的真机调试文件,放到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 目录下重启XCode即可。

    xcode 真机调试包 13.0.zip

    4. **压缩包内容**:“13.0”这个文件名可能是指Xcode 13.0的安装文件或者是一些必要的组件,如证书、配置文件等,用于设置真机调试环境。安装或使用这个压缩包时,开发者可能需要将这些文件放到指定的位置,或者...

    Xcode真机调试包15.6.zip

    4. 调试工具增强:Xcode的调试功能是其一大亮点,15.6版本可能会有更强大的断点管理、性能分析工具以及内存检测功能,帮助开发者定位和修复问题。 5. Core Data与CloudKit整合:Xcode 15.6可能提供了更好的Core ...

    Xcode12.3真机调试包

    Xcode 12.3真机调试包,操作如下: 前往--应用程序/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport文件夹,拖到文件目录下之后重启 Xcode 即可。

    xcode真机调试10.1

    升级手机系统10.1以后真机调试就报错了,只需要将这个文件下载拷贝到Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport下面重启xcode就行了

    xcode 11.3 真机调试包

    通过Xcode的调试工具栏,你可以控制应用的执行流程,设置断点,查看变量值,以及分析内存和CPU的使用情况。 此外,Xcode 11.3还提供了强大的Interface Builder,让开发者可以直接在设计视图中构建用户界面,而无需...

Global site tag (gtag.js) - Google Analytics