xcode使用lldb的python脚本查看WebKit的WTF::String和Vector等基础类

简介: webkit关于gdb的wiki:http://trac.webkit.org/wiki/GDB 它是自带了gdb和lldb的python脚本的,路径分别在 webkit workingcopy/Tools/gdb/webkit.

webkit关于gdb的wiki:http://trac.webkit.org/wiki/GDB

它是自带了gdb和lldb的python脚本的,路径分别在

webkit workingcopy/Tools/gdb/webkit.py 直接看脚本内容http://trac.webkit.org/browser/trunk/Tools/gdb/webkit.py

webkit workingcopy/Tools/lldb/lldb_webkit.py 直接看脚本内容http://trac.webkit.org/browser/trunk/Tools/lldb/lldb_webkit.py


配置lldb初始化时加载python脚本:

1. 当然是checkout出lldb_webkit.py这个文件了,也可直接下载http://trac.webkit.org/export/147046/trunk/Tools/lldb/lldb_webkit.py,放在什么地方都行,现举例是放在用户目录下, 即 ~/

2. 在用户目录下新建文件,命名为“.lldbinit”,注意前面有个点符号哦。

3. .lldbinit的内容为:

command script import ~/lldb_webkit.py
4. 如果已打开,重启xcode

从脚本内容看,支持查看:

  • WTF::String
  • WTF::StringImpl
  • WTF::AtomicString
  • WTF::Vector
  • WTF::HashTable。 包括HashMap, HashSet等

xcode只有lldb支持了python,所以以下的截图都是lldb的。

这是测试代码:

Vector<String> v;
    v.append("hello");
    v.append("world");
    
    HashMap<String, String> map;
    map.set("h", "hello");
    map.set("w", "world");
    
    AtomicString as = "thanks";
这是xcode的可视化调试窗口的效果:


这是terminal的p功能:

(lldb) p v
(WTF::Vector<WTF::String, 0>) $0 = { size = 2, capacity = 16 } {
  (WTF::String) [0] = { length = 5, contents = 'hello' } {
    (WTF::RefPtr<WTF::StringImpl>) m_impl = {
      (WTF::StringImpl *) m_ptr = 0x000000010a45a7d0 { length = 5, is8bit = 1, contents = 'hello' }
    }
  }
  (WTF::String) [1] = { length = 5, contents = 'world' } {
    (WTF::RefPtr<WTF::StringImpl>) m_impl = {
      (WTF::StringImpl *) m_ptr = 0x000000010a45ad80 { length = 5, is8bit = 1, contents = 'world' }
    }
  }
  (size_t) m_size = 2
  (WTF::Vector<WTF::String, 0>::Buffer) m_buffer = {
    (WTF::VectorBufferBase<WTF::String>) WTF::VectorBufferBase<WTF::String> = {
      (WTF::String *) m_buffer = 0x000000010a45ae50 { length = 5, contents = 'hello' }
      (size_t) m_capacity = 16
    }
  }
}
(lldb) p as
(WTF::AtomicString) $1 = { length = 6, contents = 'thanks' } {
  (WTF::String) m_string = { length = 6, contents = 'thanks' } {
    (WTF::RefPtr<WTF::StringImpl>) m_impl = {
      (WTF::StringImpl *) m_ptr = 0x000000010a45b0b0 { length = 6, is8bit = 1, contents = 'thanks' }
    }
  }
}
(lldb) p map
(WTF::HashMap<WTF::String, WTF::String, WTF::StringHash, WTF::HashTraits<WTF::String>, WTF::HashTraits<WTF::String> >) $2 = {
  (WTF::HashMap<WTF::String, WTF::String, WTF::StringHash, WTF::HashTraits<WTF::String>, WTF::HashTraits<WTF::String> >::HashTableType) m_impl = { tableSize = 8, keyCount = 2 } {
    (WTF::String) [0] = { length = 0, contents = '' } {
      (WTF::RefPtr<WTF::StringImpl>) m_impl = {
        (WTF::StringImpl *) m_ptr = 0x0000000000000000 { length = 0, is8bit = 0, contents = '' }
      }
    }
    (WTF::String) [1] = { length = 0, contents = '' } {
      (WTF::RefPtr<WTF::StringImpl>) m_impl = {
        (WTF::StringImpl *) m_ptr = 0x0000000000000000 { length = 0, is8bit = 0, contents = '' }
      }
    }
    (WTF::String) [2] = { length = 0, contents = '' } {
      (WTF::RefPtr<WTF::StringImpl>) m_impl = {
        (WTF::StringImpl *) m_ptr = 0x0000000000000000 { length = 0, is8bit = 0, contents = '' }
      }
    }
    (WTF::String) [3] = { length = 0, contents = '' } {
      (WTF::RefPtr<WTF::StringImpl>) m_impl = {
        (WTF::StringImpl *) m_ptr = 0x0000000000000000 { length = 0, is8bit = 0, contents = '' }
      }
    }
    (WTF::String) [4] = { length = 1, contents = 'w' } {
      (WTF::RefPtr<WTF::StringImpl>) m_impl = {
        (WTF::StringImpl *) m_ptr = 0x000000010a45af70 { length = 1, is8bit = 1, contents = 'w' }
      }
    }
    (WTF::String) [5] = { length = 5, contents = 'world' } {
      (WTF::RefPtr<WTF::StringImpl>) m_impl = {
        (WTF::StringImpl *) m_ptr = 0x000000010a45b080 { length = 5, is8bit = 1, contents = 'world' }
      }
    }
    (WTF::String) [6] = { length = 0, contents = '' } {
      (WTF::RefPtr<WTF::StringImpl>) m_impl = {
        (WTF::StringImpl *) m_ptr = 0x0000000000000000 { length = 0, is8bit = 0, contents = '' }
      }
    }
    (WTF::String) [7] = { length = 0, contents = '' } {
      (WTF::RefPtr<WTF::StringImpl>) m_impl = {
        (WTF::StringImpl *) m_ptr = 0x0000000000000000 { length = 0, is8bit = 0, contents = '' }
      }
    }
    (ValueType *) m_table = 0x000000010a45b000
    (int) m_tableSize = 8
    (int) m_tableSizeMask = 7
    (int) m_keyCount = 2
    (int) m_deletedCount = 0
  }
}

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
1月前
|
JSON 缓存 API
深度分析淘宝API接口,用Python脚本实现
本内容深入解析淘宝开放平台 API 的接口设计与 Python 实现,涵盖接口体系、认证机制、签名规则及限流策略,并提供完整的 Python 调用框架,适用于电商系统对接与自动化运营。
|
1月前
|
JSON 算法 API
深度分析小红书城API接口,用Python脚本实现
小红书作为以UGC内容为核心的生活方式平台,其非官方API主要通过移动端抓包解析获得,涵盖内容推荐、搜索、笔记详情、用户信息和互动操作等功能。本文分析了其接口体系、认证机制及请求规范,并提供基于Python的调用框架,涉及签名生成、登录态管理与数据解析。需注意非官方接口存在稳定性与合规风险,使用时应遵守平台协议及法律法规。
|
1月前
|
JSON API 数据安全/隐私保护
【干货满满】分享微店API接口到手价,用python脚本实现
微店作为知名社交电商平台,其开放平台提供商品查询、订单管理等API接口。本文介绍如何通过微店API获取商品到手价(含优惠、券等),涵盖认证机制、Python实现及关键说明。
|
1月前
|
JSON API 数据安全/隐私保护
【干货满满】分享淘宝API接口到手价,用python脚本实现
淘宝开放平台通过API可获取商品到手价,结合商品详情与联盟接口实现优惠计算。需使用AppKey、AppSecret及会话密钥认证,调用taobao.tbk.item.info.get接口获取最终价格。代码示例展示签名生成与数据解析流程。
|
1月前
|
JSON API 数据安全/隐私保护
深度分析苏宁API接口,用Python脚本实现
苏宁易购开放平台提供覆盖商品、订单、库存、门店等零售全链路的API服务,采用RESTful架构与“AppKey+AppSecret+签名”认证机制,支持线上线下一体化业务处理。本文详解其API特性、认证流程及Python调用实现。
|
1月前
|
自然语言处理 安全 API
深度分析洋码头API接口,用Python脚本实现
洋码头是国内知名跨境电商平台,专注于海外商品直购。本文基于其API的通用设计逻辑,深入解析了认证机制、签名规则及核心接口功能,并提供了Python调用示例,适用于商品与订单管理场景。
|
1月前
|
JSON API 数据格式
深度分析易贝API接口,用Python脚本实现
本文深度解析了eBay开放平台的RESTful API接口体系,涵盖其核心功能、OAuth 2.0认证机制、请求规范及限流策略,并基于Python构建了完整的API调用框架。内容包括商品与订单管理接口的实现逻辑、认证流程、错误处理机制及实战调用示例,适用于跨境电商系统开发与多平台集成。
|
1月前
|
JSON 监控 BI
深度分析亚马逊API接口,用Python脚本实现
本内容深度解析亚马逊SP-API接口体系,涵盖商品、订单、库存等核心功能域,详解LWA认证、AWS签名及Python调用实现,适用于跨境电商系统开发与集成。
|
1月前
|
API Python 数据格式
深度分析京东API接口,用Python脚本实现
深度分析京东API接口,用Python脚本实现
|
1月前
|
JSON API 开发者
深度分析微店API接口,用Python脚本实现
微店作为知名移动端电商平台,其开放平台提供丰富的API接口,支持商品、订单、客户及营销管理。本文分析其API核心特性,并提供Python调用示例,助力开发者快速集成业务功能。

推荐镜像

更多