web-dev-qa-db-ja.com

lldbエラー:タイプのオブジェクトにプロパティが見つかりません

Lldbを使用してiOSアプリをデバッグしようとしていますが、デバッグ時に非常に奇妙なエラーが発生します。

ブレークポイントの数行前に、次のように表示されます。

CGRect frame = view.frame;

Lldbのprint frameコマンドで問題なくアクセスできます。ただし、lldbでフレームに再度アクセスしようとすると、print view.frameと入力すると、次のエラーが発生します。

error: property 'frame' not found on object of type 'UIView *'

viewUIView*インスタンスであり、po viewと入力して正しい結果を取得することで、frameという有効なプロパティがあることを確認できるため、これは意味がありません。

(UIView *) $4 = 0x1e199bf0 <MyAppCustomView: 0x1e199bf0; frame = (3398 3396; 204 208); layer = <CALayer: 0x1e199ce0>>

この特定のlldbエラーが私に発生したくさん、このエラーの原因を見つけることができませんでした。 lldbのタイプ 'NSMutableArray *' POコマンドのオブジェクトにプロパティ 'count'が見つかりません でgdbを(gdb) p view.frameとして使用できると提案されましたが、error: '(gdb)' is not a valid command.を取得しています。そして私はgdbコマンドが「機能する」のではないかと強く疑っています。とにかく別のデバッガーの内部。

ランダムに発生するこのバグの提案または回避策はありますか?

21
Can Poyrazoğlu

Objective-Cを使用する場合、メッセージ送信のドット表記はlldbではサポートされません。角かっこ表記を使用して、結果をCGRectにキャストします。

p (CGRect)[view frame]
55
Nate Chandler

上記が機能しない場合に備えて(私にとっては機能しませんでした。変数セルのフレーム、UITableViewCellから派生したクラスを探しています):余分な括弧を強制すると、lldbの小さな頭脳が役立つように見えました:

p ((CGRect)[cell frame])

presto magico:

(CGRect) $5 = Origin=(x=0, y=0) size=(width=320, height=44)
3
ssdscott

Xcode>製品>スキーム>スキームの編集>実行>診断でスレッドサニタイザーを無効にする(チェックを外す)必要がありました。スレッドサニタイザーを有効にすると、LLDBを介して多くのNSViewプロパティ(境界、フレームなど)にアクセスできませんでした。

0
Andrew