xcode使用lldb的python脚本查看WebKit的WTF::String和Vector等基础类-阿里云开发者社区

开发者社区> 刘恒兴> 正文

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
  }
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【转】Oracle 查看表空间使用率 SQL 脚本
文章转自:http://blog.csdn.net/tianlesoftware/article/details/7619732 1 /* Formatted on 2012/5/31 14:51:13 (QP5 v5.
658 0
使用Python脚本批量裁切栅格
对栅格的裁切,我们通常使用裁切(数据管理-栅格-栅格处理)或按掩膜提取(空间分析-提取分析)来裁切,裁切的矢量要素通常是一个要素图层或Shape文件。如果要进行批量处理,可以使用ToolBox中的批量处理工具。
1056 0
xcode使用lldb的python脚本查看WebKit的WTF::String和Vector等基础类
webkit关于gdb的wiki:http://trac.webkit.org/wiki/GDB 它是自带了gdb和lldb的python脚本的,路径分别在 webkit workingcopy/Tools/gdb/webkit.
957 0
如何使用Visual Studio Code调试PHP CLI应用和Web应用
在按照Jerry的公众号文章 什么?在SAP中国研究院里还需要会PHP开发? 进行XDebug在本地的配置之后,如果想使用Visual Studio Code而不是Eclipse来调试PHP应用,步骤也比较简单。
1075 0
Contoso 大学 - 使用 EF Code First 创建 MVC 应用
原文 Contoso 大学 - 使用 EF Code First 创建 MVC 应用 Contoso 大学 Web 示例应用演示了如何使用 EF 技术创建 ASP.NET MVC 应用。示例中的 Contoso 大学是虚构的。
1085 0
Linux的nm查看动态和静态库中的符号
功能 列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等。所谓符号,通常指定义出的函数,全局变量等等。   使用 nm [option(s)] [file(s)] 有用的options: -A 在每个符号信息的前面打印所在对象文件名称; -C 输出demang...
2142 0
MDF文件查看器(SQL MDF Viewer) 1.0 绿色版
当你想查看一个 SQL Server 数据库的 MDF 文件的时候,而你却没有安装 SQL Server  (那么庞大的一个软件,安装之后想卸载?根本卸载不干静), 那怎么办呢? MDF文件查看器(SQL MDF Viewer) 1.0 绿色版,这是一个很不错的工具,下载即用,不过只有 Windows 版。
1277 0
使用Visual Studio Code编写和激活ABAP代码 (上)
猪年春节后的第一篇,Jerry祝各位猪年大吉! 2019年的六分之一马上就快过完了,不知道大家在新的一年是否给自己定了新的小目标呢?这里Jerry先预祝大家到2019年年底的时候,在年初制定的小目标都能实现。
845 0
+关注
刘恒兴
一个喜欢在各个技术领域到处浪的人
119
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载