Lldbを使用してiOSアプリをデバッグしようとしていますが、デバッグ時に非常に奇妙なエラーが発生します。
ブレークポイントの数行前に、次のように表示されます。
CGRect frame = view.frame;
Lldbのprint frame
コマンドで問題なくアクセスできます。ただし、lldbでフレームに再度アクセスしようとすると、print view.frame
と入力すると、次のエラーが発生します。
error: property 'frame' not found on object of type 'UIView *'
view
がUIView*
インスタンスであり、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コマンドが「機能する」のではないかと強く疑っています。とにかく別のデバッガーの内部。
ランダムに発生するこのバグの提案または回避策はありますか?
Objective-Cを使用する場合、メッセージ送信のドット表記はlldbではサポートされません。角かっこ表記を使用して、結果をCGRectにキャストします。
p (CGRect)[view frame]
上記が機能しない場合に備えて(私にとっては機能しませんでした。変数セルのフレーム、UITableViewCellから派生したクラスを探しています):余分な括弧を強制すると、lldbの小さな頭脳が役立つように見えました:
p ((CGRect)[cell frame])
presto magico:
(CGRect) $5 = Origin=(x=0, y=0) size=(width=320, height=44)
Xcode>製品>スキーム>スキームの編集>実行>診断でスレッドサニタイザーを無効にする(チェックを外す)必要がありました。スレッドサニタイザーを有効にすると、LLDBを介して多くのNSViewプロパティ(境界、フレームなど)にアクセスできませんでした。