Xcodeデバッグ-画像の表示


99

Xcodeデバッガの使用が大好きです。変数の値を確認して、変更することもできます。

しかし、画像変数によって参照されている画像をどうにかして表示できますか?私はその生のバイトを見ることができることを知っていますが、その内容でウィンドウを表示する方がはるかに人間に優しいでしょう。

Xcodeはこれをサポートしない可能性があります。たぶん、画像を表示するのに役立つ外部ツールがあるでしょうか?

回答:


273

クイックルックを使用して、Xcodeデバッガーで画像を検査します。

デバッガーでNSImageまたはUIImageを選択してから、Quick Lookの「目」アイコンをクリックします。

Xcodeデバッガーツールバーの「目」アイコン

OS Xの他の領域と同様にspacebar、Quick Lookにも使用できます!

クイックルックを介してXcodeデバッガーでUIImageを表示する

デバッガーのクイックルックは、独自のクラスにも実装できます。

カスタムタイプのクイックルックの有効化

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がデバッグ中に画像を解釈してくれるといいのですが。
Avi Shukron、2011年

これは素晴らしいアイデアであり、私を助けてくれました-ありがとう。誰かがそれを指摘したら明白な種類ですが、それでも素晴らしい指針です。
スコットリトル

@unsynchronizedで確認できます... Xcode 5はデバッガーで画像を表示できます...
Avi Shukron

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を介して一時フォルダを探す必要が
なくなり

良い提案です(/ Users / <ユーザー名> /を使用する必要があります。〜/では機能しません)。それに応じて提案を更新しました。
マックワース2014年

素晴らしい提案@mackworth。ありがとう。
arango_86

13

lldbコンソールで作業したい場合は、chiselコマンド「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 "アトミック:NO];
マックワース

-7

イメージの行にブレークポイントを配置し、デバッガーで次のように記述できます。

po your_UIImage_object

poはの略ですprint object。これは、渡されたオブジェクト(あなたの場合は画像)に関するいくつかの有用な情報を表示するGDBコマンドです。


1
実際に、UIImageオブジェクトでpoを直接使用すると、インスタンスのクラス名のメモリアドレスのみがコンソールに出力されます。例:<UIImage:0x7fc98df6c7d0>
Daniel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.