`
zhangziyangup
  • 浏览: 1076191 次
文章分类
社区版块
存档分类
最新评论

Xcode如何查看内存中的数据

 
阅读更多
在 debug 模式下如何在断点处,查看字符指针变量内存中的值,像vs2008的调试工具一样的内存查看器,现在只能查看第一个内存中的值可以在输出窗口采用gdb命令:x /nfu <addr>

n表示要显示的内存单元的个数

-----------------------------------------

f表示显示方式, 可取如下值:
x 按十六进制格式显示变量
d 按十进制格式显示变量
u 按十进制格式显示无符号整型
o 按八进制格式显示变量
t 按二进制格式显示变量
a 按十六进制格式显示变量
i 指令地址格式
c 按字符格式显示变量
f 按浮点数格式显示变量
-----------------------------------------
u表示一个地址单元的长度:
b表示单字节
h表示双字节
w表示四字节
g表示八字节
-------------------------------------------
例如x/16xb self

会显示self指针地址内容,16个字节,16进制

-------------------------------------------

-------------------------------------------

用 Xcode Debug 时可以用以下方法查看全局变量:

Objective-C 直接在console(控制台-gdb)输入 po+变量名

开发程序时,加了断点进行debug但发现不知到怎样查看变量的内容。用惯eclipse了。看到控制台上显示GDB,就查了下GDB的命令,方便以后使用
clear FILENAME:NUM 删除断点。

continue 继续执行直到下一个断点,也可以写做cont
help NAME 帮助
break NUM 在某行设置断点
kill 终止被调试的程序
print-object 显示对象的内容,也可以写做po
whatis 查看对象的数据类型
next 向前执行一行代码
step 进入一个方法
finish 跳出一个方法
以上命令可以在xcode的控制台进行输入

在GDB窗口中使用po就可以查看变量.(po = print object)
1)查看String 或其它变量。
po 变量名
2)查看某个Property。比如要查看item变量的name属性。
po [item name] 注意,po item.name是不工作的。
3)查看数组
po [myArray objectAtIndex:index]



/******************************************************我是分割线***********************************************/

在Xcode中,Debug时,不能像eclipse ,或VS那些集成开发那样,能直接查看变量的值。那怎么在调试的时候查看XCode的变量呢?
有一些方法的。

1、新建一个Single View App

在viewDidLoad里添加些代码:
- (void)viewDidLoad{ [super viewDidLoad]; NSDictionary*dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1", @"28",@"age",@"rongfzh",@"name",nil]; UILabel*label =[[UILabel alloc] init]; label.frame= CGRectMake(20,40,250,60); label.text= [dic objectForKey:@"name"]; [self.view addSubview:label];}
在最后一行打上断点。
2、"po" : print object 命令 打印出对象。

Command+R调试运行,在 Debug Console 上lldb上输入po dic回车,显示如下:


这就把词典内容打印出来了。
再打印label试试。

(lldb)po label

(UILabel *) $3 = 0x06a8bdd0 <UILabel: 0x6a8bdd0; frame = (20 40; 250 60); text = 'rongfzh'; clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x6a8be90>>

label的信息也打印出来了。

3、print命令

print (char*)[[dic description] cString]

(char *) $4 = 0x06d79760 "{\n age = 28;\n key1 = value1;\n name = rongfzh;\n}"

打印对象的retainCount,但对象被回收

(lldb) print (int)[label retainCount]

(int) $2 = 1


/*******************************************************************************************************************/

对于IPhone开发/XCode的初学者,如何在调试时查看变量的值是很头痛的事情。因为Xcode的expression 经常无法正确显示变量的值。但是强大的GDB可以很方便的帮我们查看变量的值。

当执行到某断点时,在GDB窗口中使用po就可以查看变量.(po = print object)<wbr></wbr>
1)查看String 或其它变量。
po 变量名
2)查看某个Property。比如要查看item变量的name属性。
po [item name] <wbr><wbr>注意,po item.name是不工作的。</wbr></wbr>
3)查看数组
po [myArray objectAtIndex:index]
分享到:
评论

相关推荐

    xcode 详解创建静态库和动态库的方法

    库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 静态库:这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进...

    iOS性能优化-Allocations分析内存分配

    菜单栏选择Product-&gt;Profile,然后选择Allocations,运行项目,按照内存飙升的路径重复操作,采集到内存数据后停止运行。默认看到的数据是Statistics(静态分析),点击mark2可以更改数据分析模式。为了更好的解决问题...

    SwiftlyCache:SwiftlyCache是​​一个线程安全的IOS通用缓存库

    SwiftlyCache Swiftlycache是用swift 5编写的线程安全的IOS通用缓存库。...将源文件添加到您的Xcode项目中 例子: 缓存符合可codable协议的结构 struct Student:Codable { var name:String var age:Int init(n

    yr-cachyr:使用Swift编写的适用于iOS,macOS和tvOS的小型键值数据缓存

    卡奇尔使用Swift编写的iOS,macOS,tvOS和watchOS的类型安全键值数据缓存。 已经存在大量的缓存解决方案,为什么还要再... 要使用Xcode 11将Cachyr集成到Xcode项目中,请在File &gt; Swift Packages &gt; Add指定它。 https:

    algorithmstudy:用于实践算法和数据结构的仓库

    算法研究个人算法研究信息和数据共享(包括源代码,概念解释等)语言:C / C ++编译器:Xcode,Visual Studio代码,Visual Studio 2013(Windows 10)数据结构/算法基本概念时间复杂度定义:算法执行时间计算方法:...

    fndn-rn-datastore

    注意:进行中,请稍后再检查持久的设备上商店包装 全球内存店将设备上的存储与远程同步(使用 ) 批量上传图片(使用调整服务器端大小) 使用具有缓存测试的批量杂项iOS Filesystem utils(重命名,复制,删除) ...

    精通Object-C:从基础到高级项目实践.docx

    数据类型 控制流(if-else, switch, for, while) 函数和方法 面向对象编程 类和对象 继承 多态性 封装 高级特性 协议和委托 分类和扩展 内存管理(自动引用计数ARC) 并发编程(GCD) 开发环境和工具 Xcode安装和...

    TSBoilerplateSwift

    TSBoilerplateSwift 一个项目,它将用作新的iOS项目的起点。 该项目使用Cocoapods和git子模块... 数据模型从应用程序启动时就存在于内存中。 数据模型是使用标准的Core Data编辑器设计的,但是该应用程序不使用NSMan

    清理Mac空间

    还在为你的128g的硬盘不够而...如果你安装了xcode 只要在你的终端下运行该脚本 立即清理出20g的内存。使用方法,将username 改成自己的用户名;xcode 请根据需要选择删除自己sdk 。 该脚本保留了MacSdk 和 iPhone的Sdk

    DTTableViewManager:面向协议的UITableView管理,由泛型和关联类型提供支持

    灵活的内存/ CoreData /领域/可变数据源存储选项 强大的编译时安全事件系统,涵盖所有UITableView委托方法 通过代码,XIB或情节提要创建的视图,自动注册和出队 可以与UITableViewController一起使用,也可以与...

    iOS编程 第2版

    Objective-C的习惯约定有哪些(例如命名约定,内存管理约定),创建子类时如何处理初始化方法,Cocoa的常见设计模式有哪些,如何选择数据保存方法等。这些问题,如果读者自己摸索,难免费时费力。本书已经将这些知识...

    VirtualBox安装Mac+OS+X虚拟机全教程以及iOS开发必备软件

    就是原来的数据可能都没了。(网上的教程一般都不是100%成品教程,有缺陷,可能作者的一句话描述不 清,对你来说都可能是灾难性的。) 2、vBox虚拟机它占用内存小,运行很流畅,创建同等规模的Mac系统,它要比其他...

    WeightLogger-Images:我的WeightLogger应用程序的扩展-向CoreData添加全屏和缩略图照片

    我还在UIImagePickerController委托方法中包含了一些GCD代码,以帮助提高内存性能。 链接到此代码的视频教程。 由于该视频是使用iOS8和XCode 6创建的,因此已过时 注意:这是XCode 7和Swift 2.0的最新信息

    《iPhone开发实战》.(Christopher Allen).pdf

    11.2 在xcode中创建第一个项目:hello, world!149 11.2.1 理解main.m149 11.2.2 理解应用程序委托150 11.2.3 编写“hello, world!”151 11.3 在xcode中新建类154 11.3.1 新类简介154 11.3.2 头文件154 ...

    DTCollectionViewManager:面向协议的UICollectionView管理,由泛型和关联类型提供支持

    灵活的内存/ CoreData /领域/可变数据源存储选项 强大的编译时安全事件系统,涵盖所有UICollectionView委托方法 通过代码,XIB或情节提要创建的视图,自动注册和出队 可以与UICollectionViewController一起使用,也...

    iphone开发入门经典源码

    循序渐进地介绍了从事iPhoneF发所需的基本知识,包括使用Xcode、Interface Builder、objective-C和(Cocoa Touch等开发工具,设计及美化用户界面,读写和显示数据,播放和录制多媒体,调试、优化和发布应用程序等...

    《iOS6开发指南》精彩书摘

    iOS中开发性能优化方法,其中包括:内存优化、资源文件优化、延迟加载、持久化优化、使用可重用对象、多线程以及程序编译参数等方面介绍性能优化。 第18章“管理好你的程序代码——代码版本控制”。学习如何使用Git...

    Objective-C2.0程序设计

    2.1.1 使用Xcode 2.1.2 使用Terminal 2.2 解释第一个程序 2.3 显示变量的值 2.4 小结 2.5 练习 第3章 类、对象和方法 3.1 到底什么是对象 3.2 实例和方法 3.3 用于处理分数的Objective-C类 3.4 @interface部分 ...

    DoubleAgent:用Swift写的模拟服务器

    请求信息和响应当前存储在内存中。 可能的工作流程 待办事项:重访 针对专用用例创建和共享响应映射文件 使用文件为服务器播种(使用toDoubleAgent工具) 使您的应用程序请求主机指向localhost:8080或 享受您的...

    libsquash:可移植的,由用户使用的SquashFS,可以轻松地链接和嵌入到您的应用程序中

    通过将指针传递到字节数组来从内存而不是文件中读取数据,这可以由独立安装的工具生成并预先加载到内存中。 引入了虚拟文件描述符(vfd)作为后续libsquash操作的句柄。 vfd是通过dup(0)生成的,因此可以与该进程...

Global site tag (gtag.js) - Google Analytics