`

[Cocoa]XCode的一些调试技巧【转】

 
阅读更多

XCode 内置GDB,我们可以在命令行中使用 GDB 命令来调试我们的程序。下面将介绍一些常用的命令以及调试技巧。

po 命令:为 print object 的缩写,显示对象的文本描述(显示从对象的 description 消息获得的字符串信息)。

比如:

上图中,我使用 po 命令显示一个 NSDictionary 的内容。注意在左侧我们可以看到 dict 的一些信息:3 key/value pairs,显示该 dict 包含的数据量,而展开的信息显示 isa 层次体系(即class 和 metaclass结构关系)。我们可以右击左侧的 dict,选中“Print Description of "dict"”,则可以在控制台输出 dict 的详细信息:

  1. Printing description of dict:  
  2. <CFBasicHash 0x1001149e0 [0x7fff7e27ff40]>{type = immutable dict, count = 3,  
  3. entries =>  
  4.     0 : <CFString 0x100002458 [0x7fff7e27ff40]>{contents = "first"} = <CFString 0x100002438 [0x7fff7e27ff40]>{contents = "one"}  
  5.     1 : <CFString 0x100002498 [0x7fff7e27ff40]>{contents = "second"} = <CFString 0x100002478 [0x7fff7e27ff40]>{contents = "two"}  
  6.     2 : <CFString 0x1000024d8 [0x7fff7e27ff40]>{contents = "third"} = <CFString 0x1000024b8 [0x7fff7e27ff40]>{contents = "three"}  
  7. }  
  8. (gdb)   

print 命令:有点类似于格式化输出,可以输出对象的不同信息:

如:

  1. (gdb) print (char *)[[dict description] cStringUsingEncoding:4]  
  2. $1 = 0x1001159c0 "{\n    first = one;\n    second = two;\n    third = three;\n}"  
  3. (gdb) print (int)[dict retainCount]  
  4. $2 = 1  
  5. (gdb)   

 

注:4是 NSUTF8StringEncoding 的值。

info 命令:我们可以查看内存地址所在信息

比如 "info symbol 内存地址" 可以获取内存地址所在的 symbol 相关信息:

  1. (gdb) info symbol 0x00000001000017f7  
  2. main + 343 in section LC_SEGMENT.__TEXT.__text of /Users/LuoZhaohui/Library/Developer/Xcode/DerivedData/RunTimeSystem-anzdlhiwvlbizpfureuvenvmatnp/Build/Products/Debug/RunTimeSystem  

 

比如 "info line *内存地址" 可以获取内存地址所在的代码行相关信息:

 

  1. (gdb) info line *0x00000001000017f7  
  2. Line 62 of "/Users/LuoZhaohui/Documents/Study/RunTimeSystem/RunTimeSystem/main.m" starts at address 0x1000017f7 <main+343> and ends at 0x10000180a <main+362>.  

 

show 命令:显示 GDB 相关的信息。如:show version 显示GDB版本信息

  1. (gdb) show version  
  2. GNU gdb 6.3.50-20050815 (Apple version gdb-1708) (Mon Aug  8 20:32:45 UTC 2011)  
  3. Copyright 2004 Free Software Foundation, Inc.  
  4. GDB is free software, covered by the GNU General Public License, and you are  
  5. welcome to change it and/or distribute copies of it under certain conditions.  
  6. Type "show copying" to see the conditions.  
  7. There is absolutely no warranty for GDB.  Type "show warranty" for details.  
  8. This GDB was configured as "x86_64-apple-darwin".  

help 命令:如果忘记某条命令的语法了,可以使用 help 命令名 来获取帮助信息。如:help info 显示 info 命令的用法。
  1. (gdb) help info  
  2. Generic command for showing things about the program being debugged.  
  3.   
  4. List of info subcommands:  
  5.   
  6. info address -- Describe where symbol SYM is stored  
  7. info all-registers -- List of all registers and their contents  
  8. info args -- Argument variables of current stack frame  
  9. info auxv -- Display the inferior's auxiliary vector  
  10. info breakpoints -- Status of user-settable breakpoints  
  11. info catch -- Exceptions that can be caught in the current stack frame  
  12. info checkpoints -- Help  
  13. info classes -- All Objective-C classes  
  14. ......  
  15.   
  16. Type "help info" followed by info subcommand name for full documentation.  
  17. Command name abbreviations are allowed if unambiguous.  
  18. (gdb)   

在系统抛出异常处设置断点

有时候我们的程序不知道跑到哪个地方就 crash 了,而 crash 又很难重现。保守的做法是在系统抛出异常之前设置断点,具体来说是在 objc_exception_throw处设置断点。设置步骤为:首先在 XCode 按 CMD + 6,进入断点管理窗口;然后点击右下方的 +,增加新的 Symbolic Breakpoint,在 Symbol 一栏输入:objc_exception_throw,然后点击 done,完成。 这样在 Debug 模式下,如果程序即将抛出异常,就能在抛出异常处中断了。比如在前面的代码中,我让 [firstObjctcrashTest]; 抛出异常。在 objc_exception_throw 处设置断点之后,程序就能在该代码处中断了,我们从而知道代码在什么地方出问题了。

分享到:
评论

相关推荐

    Professional Xcode 3

    6. **调试技巧**:运用Xcode的调试器进行代码调试,包括断点、变量观察、步进执行和内存检查。 7. **测试与性能分析**:了解单元测试、集成测试的实施,以及使用Instruments进行性能分析,识别并优化性能瓶颈。 8....

    xcode培训教材

    除此之外,Xcode还支持Cocoa Touch(iOS)和Cocoa(macOS)框架,这些框架提供了大量的预定义组件和服务,使得开发者可以快速构建功能丰富的应用。你还将学习到如何使用App Store Connect来提交应用,进行版本管理,...

    苹果开发之Cocoa编程原书第4版

    9. **测试与调试**:Cocoa开发包括Xcode内置的测试框架和调试工具,帮助开发者确保代码的质量和稳定性。书中可能涵盖如何编写单元测试、集成测试以及使用Xcode的调试功能。 10. **发布与分发**:最后,你将学习如何...

    Learn Cocoa on the Mac, 2nd Edition

    - **调试技巧**:分享了一些调试技巧,帮助开发者快速定位和解决问题。 #### 在Cocoa中绘图 本章介绍了如何使用Cocoa框架来进行基本的绘图操作。 - **绘图基础**:解释了如何使用Cocoa API来绘制线条、形状等基本...

    Cocoa.Programming.for.Mac.OS.X.4th.Edition PDF正式版

    本书将分享一些实用的调试技巧,并指导如何优化应用程序的性能。 9. 高级编程技巧:随着对基础的掌握,本书还会介绍一些高级编程技巧,例如多线程编程、自定义类和继承等,帮助开发者在Cocoa环境中更高效地编写代码...

    xcode工具开发教程

    6. 排除问题和调试技巧:学习如何识别和解决问题,以及使用Xcode的调试工具。 本教程的章节结构如下: 1. 教程概述和设计模式:简述你要创建的应用,并介绍将采用的设计模式。 2. 创建你的工程:详细说明如何从零...

    Cocoa Programming for Mac OS

    本书介绍了如何使用Xcode进行项目管理、代码编辑、调试等功能。 - **Interface Builder**:一个强大的用户界面设计工具,允许开发者通过拖放操作创建GUI元素,并与代码关联。本书详细讲解了如何使用Interface ...

    cocoa程序设计中译版

    8. **测试与调试**:书中会涵盖Xcode的测试工具,如Unit Tests和Integration Tests,以及如何使用Xcode的调试器进行问题定位。 9. **国际化与本地化**:Cocoa支持多语言应用,书中会讲解如何实现应用程序的国际化和...

    深入浅出Cocoa教程

    - [调试]XCode的一些调试技巧 - [版本管理]Mac下配置Git服务器 - [翻译]苹果Cocoa编码规范 以上参考资料提供了详细的讲解和示例,对于进一步深入学习和理解Objective-C和Cocoa框架非常有帮助。

    Cocoa and Objective-C cookbook

    - **Xcode开发环境**:介绍如何使用Xcode进行Objective-C开发,包括项目创建、编译和调试技巧。 - **Cocoa框架入门**:概述Cocoa框架的基本结构和组成部分,以及如何在项目中引入这些框架。 2. **核心编程技术** ...

    iphone开发基础教程(Xcode4.3版)

    11. **测试与调试技巧**:提供一系列实用的测试和调试方法,帮助开发者找出并修复应用中的错误或性能瓶颈。 12. **发布流程**:最后,本书还会涉及如何准备应用以供发布到App Store的过程,包括满足Apple的审核标准...

    iphone开发cocoa教材中文pdf

    "cocoa教材2-26"可能指的是书中的第26章,这一章可能涵盖了更高级的主题,如高级动画技术、自定义视图控制器转场或是特定的API使用技巧。 通过阅读和学习这本《iPhone开发:Cocoa教程中文PDF》,你将具备开发高...

    Cocoa Programming Developer's Handbook

    - **调试工具**:包括断点调试、性能分析等功能,帮助开发者快速定位问题。 #### 六、案例研究与实践技巧 - **实际项目**:本书通过具体的实例介绍了如何使用 Cocoa 创建实际应用程序的过程。 - **最佳实践**:提供...

    cocoa programming

    这本书可能涵盖了使用Cocoa框架进行应用开发的各个方面,包括但不限于用户界面设计、编程实践、性能优化、调试技巧等。而对版权的强调也意味着读者在参考书中的内容时,应保持对知识产权的尊重。

Global site tag (gtag.js) - Google Analytics