Xcode调试-显示图像


99

我喜欢使用Xcode调试器。您可以查看变量的值,甚至可以更改它。

但是我可以以某种方式显示由图像变量引用的图像吗?我知道我可以看到其原始字节,但显示带有其内容的窗口会更加人性化。

Xcode可能不支持此功能。也许有一个外部工具可以帮助显示图像?

Answers:


273

使用快速查看在Xcode调试器中检查图像。

在调试器中选择NSImageUIImage,然后单击“快速查看”“眼睛”图标。

Xcode调试器工具栏中的“眼睛”图标

与OS X的其他区域一样,您也可以使用spacebarQuick Look!

通过快速查看在Xcode调试器中查看UIImage

调试器中的Quick Look也可以为您自己的类实现:

对自定义类型启用快速查找

Xcode调试器中的变量快速查看功能使您可以通过图形呈现快速直观地评估对象变量的状态,该图形显示在调试器变量视图的弹出窗口中或源代码中。

本章介绍如何为自定义类类型实现快速查找方法,以便这些类型的对象变量也可以在“快速查找”弹出窗口中直观地呈现。


13
最好。特征。曾经!
2015年

2
这是一年中最有价值的答案!
vedrano 2015年

8
使用Xcode进行编码已经很久了,我对此功能一无所知!这太棒了!!!非常感谢
Joan Cardona

2
知道此功能,但感谢空格键提示!比用鼠标点击眼睛容易得多。:)
Chintan Patel

1
像魅力一样使用Xcode 10和Swift 4.2。谢谢。
atereshkov

16

编辑:

从Xcode 5开始,调试器可以向您展示UIImage / CGImageRef变量的直观表示!

Xcode本身无法做到。我不了解外部工具。

我在调试时测试图像的工作是将原始数据转换为图像文件格式(如.png),然后将其保存在某个位置,然后使用任何图像查看工具打开图像。

为此,我有一段代码,基本上像这样:

NSData *imageData = UIImagePNGRepresentation(self.myUIImage);
[imageData writeToURL:desktopURL atomically:YES];

我只是将此代码复制粘贴到我想在运行中查看图像内容的位置。

一定要得到很快摆脱这个代码尽可能由于转换的高成本UIImageNSData


2
只是好奇:您为什么说“(不应该)这样做”?曾经有一段时间人们说计算机“不应”使用彩色屏幕,因为它们太贵了,或者程序员使用的文本编辑器“不应”使用语法检查您的代码。在某些时候,我们确实需要从古老的观念继续前进吗?
同步,时间

好吧,所以我把“不应该”拿回来。我希望有一天IDE可以在调试时解释图像。
阿维·舒克隆

这是个好主意,对我很有帮助-谢谢。有人指出来,这很明显,但仍然是一个很好的指针。
Scott Little

@unsynchronized您会看到... Xcode 5可以在调试器中显示图像...
Avi Shukron 2013年

14

针对Xcode 5进行编辑:现在,当您将鼠标悬停在图像变量名称上时,右侧会出现一个“眼睛”图标。只需单击它即可查看当前图像!

注意:有时,即使图像正确,这在Xcode中也会失败。如果发生这种情况,或者如果您没有UIImage变量(例如,它是另一个对象的属性,则仍然可以使用较旧的答案):

较早的答案:从Avraham的答案开始,我尝试了一些实验,以显示来自lldb的iOS图像,而无需重新编译或将其添加到视图中。我终于想出了:

e [UIImagePNGRepresentation(myImage) writeToFile:@"/Users/<userName>/Desktop/myImage.png" atomically:NO];

我将此字符串保留在文本编辑器中,并在需要时将其粘贴。它将我感兴趣的当前图像(在本例中为“ myImage”)存储到桌面上的PNG文件中。然后,我可以使用“预览”打开此文件。

如果您使用的是iOS设备,则可以使用

 e [UIImagePNGRepresentation(myImage) writeToFile:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingString:@"/myImage.png"] atomically:NO];

然后,您可以使用Finder;选择您的设备;“文件”;然后是您的开发应用,然后将图像复制到桌面上即可查看。


+1000000这是个了不起的解决方案!我想补充一点,如果您正在设备上进行调试,则可以使用iFunBox或iExplorer之类的东西从设备中检索图像。
昆汀

您甚至可以直接写到“ / Users / <您的用户名> /”;这样,您就不必通过GUID查找临时文件夹
Dannie P 2014年

好的建议(请注意,您必须使用/ Users / <您的用户名> /,它不适用于〜/)。相应地更新了建议。
mackworth 2014年

很棒的建议@mackworth。谢谢。
arango_86 '18

13

如果您想使用lldb控制台,请使用凿子命令“ visualize”

小费:

安装后,可以通过以下操作设置UIImage后设置条件断点:“ visualize myUIImageToShowWithQuickLook”

在此处输入图片说明

这将在调试器停止时自动向您显示该图像。


4

如果您无法通过变量视图进入图像怎么办?

呼应@pkamb所说的-您可以使用变量视图快速查看图像。但是,如果您无法了解图片怎么办?

例如我有一张图片 (contentViewController.view.subviews[0].subviews[1] as? UIImageView).image

但是如果我尝试contentViewController在变量视图中展开,则不会显示我的子视图

在此处输入图片说明

您可以做的是右键单击,添加一个表达式,然后您可以看到它!

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明


然后,您应该可以使用与上面相同的命令:po [UIImagePNGRepresentation((contentViewController.view.subviews [0] .subviews [1] as?UIImageView).image)writeToFile:@“ / Users / <userName> / Desktop /watchImage.png“原子上:否];
马可沃思

-7

您可以在图像行中放置一个断点,然后在调试器中,只需编写:

po your_UIImage_object

po代表print object,这是GDB命令,它将显示有关传递的对象(在您的情况下为图像)的一些有用信息。


1
实际上,直接将Po与UIImage对象一起使用只会将实例的类名内存地址打印到控制台。类似于:<UIImage:0x7fc98df6c7d0>
Daniel Daniel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.