LLDB调试

作者: 玩呀玩 | 来源:发表于2019-03-20 18:31 被阅读14次

    安装facebook/chisel DerekSelander/LLDB
    LLDB会从默认的~/.lldbinit加载自定义脚本

    git clone https://github.com/facebook/chisel.git
    git clone https://github.com/DerekSelander/LLDB.git
    
    touch ~/.lldbinit
    vim ~/.lldbinit
    
    # ~/.lldbinit
    command script import pwd/chisel/fblldb.py
    command script import pwd/LLDB/lldb_commands/dslldb.py
    
    

    lldb一般最常用的就是po(print object)

    • pviews 可以打印页面结构(报错需要引用UIKit expression @import UIKit
    • presponder 0x15feab460 可以打印响应链
    • methods 0x15feab460 可以打印属性和方法
    • search UIImageView 可以查找页面元素
      • b 可以用来打断点
      • po $x1 可以打印参数
      • pblock 可以打印block (逆向可以查看block里面的参数了)
    (lldb) b [LoginManager requestDirectLoginInController:completion:failure:]
    Breakpoint 1: where = recipe`-[LoginManager requestDirectLoginInController:completion:failure:] at LoginManager.m:93, address = 0x0000000100748044
    (lldb) po $x3
    <__NSGlobalBlock__: 0x102fa9300>
    (lldb) pblock 0x102fa9300
    Imp: 0x100311768    Signature: void ^(NSDictionary *, bool, bool);
    

    配合MallocStackLogging环境变量 使用lldb.macosx.heap.py
    位置/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A/Resources/Python/lldb/macosx/heap.py
    虽然表明OS X使用但是iOS也可以使用

    • 查看一个对象分配内存的堆栈(需要配合MallocStackLogging malloc_info -s)
    • 得到内存指定类的实例对象(objc_refs)
    • 得到一个内存地址所有被引用的地方(ptr_refs)
    • 搜索内存中指定的C字符串(cstr_refs)
    (lldb) command script import ;;db.macosx.heap
    "malloc_info", "ptr_refs", "cstr_refs", "find_variable", and "objc_refs" commands have been installed, use the "--help" options on these commands for detailed help.
    

    相关文章

      网友评论

        本文标题:LLDB调试

        本文链接:https://www.haomeiwen.com/subject/atdtvqtx.html