Налагодження Xcode - відображення зображень


99

Я люблю користуватися налагоджувачем Xcode. Ви можете поглянути на значення змінної і навіть змінити його.

Але чи можу я якось ПОКАЗАТИ зображення, на яке посилається змінна зображення? Я знаю, що бачу його необроблені байти, але було б набагато зручнішим для людини відображення вікна з його вмістом.

Можливо, Xcode цього не підтримує. Можливо, існує зовнішній інструмент, який би допоміг відображати зображення?

Відповіді:


273

Використовуйте Quick Look для перевірки зображень у налагоджувачі Xcode.

Виберіть NSImageабо UIImageв налагоджувачі, а потім клацніть піктограму швидкого перегляду "око".

піктограма "око" на панелі інструментів налагоджувача Xcode

Як і в інших областях OS X, ви також можете скористатися spacebarфункцією швидкого пошуку!

Перегляд UIImage у налагоджувачі Xcode за допомогою Quick Look

Швидкий пошук у налагоджувачі також можна реалізувати для власних класів:

Увімкнення швидкого пошуку спеціальних типів

Функція швидкого перегляду змінних у налагоджувачі Xcode дозволяє отримати швидку візуальну оцінку стану змінної об’єкта за допомогою графічного візуалізації, що відображається у вікні вікна, що відображається, у поданні змінних налагоджувача або на місці у вихідному коді.

У цьому розділі описується, як ви реалізуєте метод Quick Look для власних типів класів, щоб змінні об’єктів цих типів також могли візуально відображатися у вікні швидкого пошуку.


13
Найкраще. Особливість. Колись!
Сев

2
Це найцінніша відповідь року!
vedrano

8
Вікове кодування в Xcode, і я ніколи не знав про цю функцію! Це круто!!! Велике спасибі
Джоан Кардона

2
Знав про цю функцію, але дякую за підказку пробілу! Набагато простіше, ніж клацання оком мишею. :)
Chintan Patel

1
Працюйте з Xcode 10 і Swift 4.2, як шарм. Дякую.
атерешков

16

Редагувати:

Починаючи з Xcode 5, налагоджувач може показати вам візуальне представлення змінних UIImage / CGImageRef!

Сам Xcode цього зробити не може. Я не знаю про зовнішні інструменти.

Що я роблю для тестування зображень під час налагодження, це перетворення цих вихідних даних у формат файлу зображення, наприклад .png, а потім їх десь зберігаю, а потім я відкриваю зображення за допомогою будь-якого інструменту перегляду зображень.

У мене є шматок коду для цієї мети, який виглядає в основному так:

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

І я просто копіюю цей код, де хочу побачити вміст зображення під час запуску.

Обов’язково позбудьтесь цього коду якомога швидше через високу вартість перетворення UIImageнаNSData


2
просто цікаво: чому ти кажеш "(і не повинен) це робити"? колись люди говорили, що комп’ютери «не повинні» мати кольорові екрани, оскільки вони занадто дорогі, або що текстовий редактор, який використовують програмісти, «не повинен» синтаксис перевіряти ваш код. в якийсь момент нам справді потрібно перейти від архаїчних ідей, звичайно?
несинхронізовано

Гаразд, тому я беру "не слід" назад. Я хотів би, щоб одного разу IDE інтерпретували зображення під час налагодження.
Аві Шукрон,

Це чудова ідея, яка мені просто допомогла - дякую. Очевидно, колись хтось на це вказує, але все одно чудовий підказка.
Скотт Літтл

@unsynchronized ти подивишся на це ... Xcode 5 може показувати зображення в налагоджувачі ...
Avi Shukron

14

Редагувати для Xcode 5: тепер, коли ви наводите курсор на ім'я змінної зображення, праворуч є піктограма "око". Просто натисніть його, щоб побачити поточне зображення!

ПРИМІТКА: іноді це не вдається в Xcode, навіть якщо зображення правильне. Якщо це трапиться, АБО якщо у вас немає змінної UIImage (наприклад, це властивість іншого об’єкта, ви все одно можете використовувати стару відповідь:

Старіша відповідь: Починаючи з відповіді Авраама, я спробував кілька експериментів для відображення зображення iOS з lldb без необхідності перекомпілювати або додавати його до подання. Нарешті я придумав:

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

Я зберігаю цей рядок у текстовому редакторі та вставляю його, коли мені це потрібно. Це зберігає поточне зображення, яке мене цікавить (у даному випадку - "myImage"), у файл PNG на робочому столі. Тоді я можу просто відкрити цей файл за допомогою Preview.

Якщо ви працюєте на пристрої iOS, ви можете використовувати

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

Тоді ви можете використовувати Finder; виберіть свій пристрій; «Файли»; потім додаток розробника та скопіюйте зображення на робочий стіл, щоб переглянути його.


+1000000 Це дивовижне рішення! Я хотів би додати, що якщо ви налагоджуєте на пристрої, ви можете використовувати щось на зразок iFunBox або iExplorer для отримання зображення з пристрою.
Квентін

Ви навіть можете написати безпосередньо в "/ Users / <ваше ім'я користувача> /"; таким чином вам не доведеться шукати свою тимчасову папку за допомогою GUID
Dannie P

Хороша порада (зверніть увагу, що ви повинні використовувати / Users / <ваше ім’я користувача> /, це не працює з ~ /). Відповідно оновлено пропозицію.
mackworth

Чудова пропозиція @mackworth. Дякую.
arango_86

13

Якщо вам подобається працювати з консоллю lldb, використовуйте долото команду "візуалізувати"

порада:

після встановлення ви можете встановити умовну точку зупинки після встановлення UIImage дією: "візуалізувати myUIImageToShowWithQuickLook"

введіть тут опис зображення

це автоматично покаже вам зображення, коли відладчик зупиниться.


4

Що робити, якщо ви не можете дістатися до зображення за допомогою перегляду змінних?

Повторюючи те, що сказав @pkamb - ви можете використовувати перегляд змінних для швидкого перегляду зображення. Але що, якщо ви не можете дістатися до зображення?

наприклад, у мене є зображення на (contentViewController.view.subviews[0].subviews[1] as? UIImageView).image

але якщо я спробую розгорнути contentViewControllerв поданні змінних, це не виставить мої підпрогляди

введіть тут опис зображення

що ви можете зробити, це клацнути правою кнопкою миші, додати вираз, і тоді ви зможете його побачити!

введіть тут опис зображення

введіть тут опис зображення

введіть тут опис зображення


Тоді ви зможете використовувати ту саму команду, що і вище: po [UIImagePNGRepresentation ((contentViewController.view.subviews [0] .subviews [1] як? UIImageView) .image) writeToFile: @ "/ Users / <userName> / Desktop /watchImage.png "атомно: НІ];
Макворт

-7

Ви можете поставити точку зупинки в рядок вашого зображення, а потім у налагоджувачі просто напишіть:

po your_UIImage_object

poрозшифровується print object, це команда GDB, яка відображатиме кілька корисних відомостей про переданий об’єкт, у вашому випадку - зображення.


1
Насправді використання po безпосередньо з об’єктом UIImage буде друкувати лише на консолі адресу пам'яті імені класу екземпляра. Щось на зразок: <UIImage: 0x7fc98df6c7d0>
Даніель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.