2016-11-23 4 views
1

与えられたフレームから "self"を取得したい。これを行う方法はありますか?XCode LLDB - 指定されたフレームから自己を取得する

「フレーム情報」とその他のオプションを試しました。例えば

(lldb) frame info frame #11: 0x0000000102767ab8 UIKit`-[UIImageView _resolveImageForTrait:] + 463 (lldb)

次の例では、私は11フレームからボタンオブジェクトをしたいです。

enter image description here

答えて

2

関数が呼び出されたときに、あなたが停止しているならば、彼らはまだABIになりますので、それは、W/Oデバッグ情報最適化された関数にパラメータを取得するにはかなり簡単だ引数渡しレジスタを指定しました。あなたが調査している問題が再現できるものであれば、自動継続ブレークポイントを-[UIImageView _resolveImageForTrait:]に置き、コマンドに$arg1を印刷するかpo'ingすることがわかります。

しかし、このスタックから値を把握しようとすると、あなたの人生はかなり困難になります。あなたが興味を持っているフレームが別の関数を呼び出したので、あなたはselfが引数渡しレジスタにもう存在しないことが保証され、再利用されました。また、引数が関数の本体の中に置かれる場所は必要ありません。最適化されたコードでは、コンパイラは、コードを最も速く実行させるものを何でも行うことが期待されます。

実際、自分が停止したコールの後で、問題のフレームで自己が参照されない場合、情報はもう存在しない可能性があります。

selfがまだそのフレームで生存している場合、関数内のどこかでスタックにプッシュされている可能性が高いので、imageWithTraitCollection:を呼び出してください。デバッグ情報は、それがどこにあるかを示しますが、唯一の選択肢は、アセンブリコードを読んで、関数の最初の最初の引数レジスタから自分が停止しているポイントまでのselfの伝播に従うことです。これは小さな関数にとってあまりにも悪くないかもしれません。

関連する問題