iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用Python扩展lldb
  • 395
分享到

使用Python扩展lldb

Pythonlldb 2023-01-31 07:01:09 395人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

Xcode集成了LLDB,进一步简化了程序调试流程。虽然LLDB很强大,但是它的命令很有限。所幸的是,lldb包含了对python的支持,使得lldb的拓展成为可能。本人在开发过程中很喜欢使用image lookup 命令,但是苦于每次只能

Xcode集成了LLDB,进一步简化了程序调试流程。虽然LLDB很强大,但是它的命令很有限。所幸的是,lldb包含了对python的支持,使得lldb的拓展成为可能。本人在开发过程中很喜欢使用image lookup 命令,但是苦于每次只能执行一条,相当耗时,因此一直想要找到一种批量执行的方法。于是将目光放到了lldb Python上......

问题:批量执行image lookup -a

(1)编写python脚本(layne_command.py),代码如下:

#coding=utf-8
#自定义lldb命令 
import lldb
import commands
import optparse
import shlex

def layne_imagelookup(debugger, command, result, internal_dict):
    target = debugger.GetSelectedTarget()
    process = target.GetProcess()
    thread = process.GetSelectedThread()

    command_args = shlex.split(command)
    parser = create_custom_parser()

    try:
        (options, args) = parser.parse_args(command_args)
    except:
        result.SetError ("option parsing failed")
        return
    if args:
        for address in args:
            print("*************************************")
            debugger.HandleCommand('image lookup -a %s'%(address))

def create_custom_parser():
    usage = "usage: %prog [options]"
    description = '''Parse Symbols to Human-readable FORMat.'''  
    parser = optparse.OptionParser(description=description, prog='print_frame',usage=usage)
    # parser.add_option('-p','--parse',type='string',dest = 'parse',help='parse symbols.');
    return parser

def __lldb_init_module(debugger, internal_dict):  
    debugger.HandleCommand('command script add -f layne_command.layne_imagelookup layne_imagelookup')  
    print('The "layne_imagelookup" python command has been installed and is ready for use.')

然后保存为文件layne_command.py,放到如下目录(自己指定):~/Python/lldb/layne_command.py
说明:
①#coding=utf-8指定python脚本编码,否则运行时注释中的中文将会报错。
②运行脚本时入口为 __lldb_init_module(debugger,internal_dict) , 即先执行函数 __lldb_init_module(debugger,internal_dict) 中的内容。debugger.HandleCommand是python中执行lldb命令的主要方式。
layne_imagelookup是批量执行image lookup命令的函数,也是自定义的新的lldb命令的名称。
optparseshlex是用于解析参数的两个重要的库。通过optparse来生成解析器。

(2)xcode中引用python脚本

在xcode中crash的时候,下方会出现lldb控制台,输入如下命令:
command script import ~/Python/lldb/layne_command.py
回车之后将会出现一行提示:The "layne_imagelookup" python command has been installed and is ready for use(这个提示是事先定义在layne_command.py中的)。然后就可以在lldb控制台像po命令那样使用layne_imagelookup了,使用方法:假如crash的时候出现的内存地址为
0x1111111 0x2222222 0x3333333 0x4444444 0x5555555
以前的做法是对每个地址使用image lookup -a命令:

(lldb)image lookup -a 0x1111111   
(lldb)image lookup -a 0x2222222
(lldb)image lookup -a 0x3333333
(lldb)image lookup -a 0x4444444
(lldb)image lookup -a 0x5555555

现在只需要:

(lldb)layne_imagelookup 0x1111111 0x2222222 0x3333333 0x4444444 0x5555555

结果将会以"************"分隔开显示,如:

(lldb) layne_imagelookup 0x0000000107bcd914 0x000000010de2435a 0x000000010de2b245 0x000000010e1e6865 0x000000010e832998
*************************************
      Address: Maketion[0x0000000100004914] (Maketion.__TEXT.__text + 8356)
      Summary: Maketion`-[AppDelegate application:didFinishLaunchingWithOptions:] + 196 at AppDelegate.m:251
*************************************
      Address: UIKit[0x000000000002135a] (UIKit.__TEXT.__text + 128650)
      Summary: UIKit`-[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 267
*************************************
      Address: UIKit[0x0000000000028245] (UIKit.__TEXT.__text + 157045)
      Summary: UIKit`-[UIApplication _runWithMainScene:transitionContext:completion:] + 1720
*************************************
      Address: UIKit[0x00000000003e3865] (UIKit.__TEXT.__text + 4070293)
      Summary: UIKit`-[__UIcanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:] + 249
*************************************
      Address: UIKit[0x0000000000a2f998] (UIKit.__TEXT.__text + 10673352)
      Summary: UIKit`-[_UICanvasLifecycleSettingsDiffAction perforMactionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:] + 231

(3)自动加载python脚本

手动加载自定义的python脚本有个缺点:程序再次运行之后,若还想使用自定义的命令,则必须再次调用
command script import ~/Python/lldb/layne_command.py,然后才能使用layne_imagelookup命令。因此这里配置一下使其自动加载。
原理:xcode启动的时候会读取一个默认文件:~/.lldbinit,只需要将命令command script import ~/Python/lldb/layne_command.py写入这个文件即可。
①打开Terminal,使用vim打开文件~/.lldbinit(若没有,vim会自动创建)。
②将命令command script import ~/Python/lldb/layne_command.py写入文件~/.lldbinit,保存退出。 (注意:layne_command.py的路径必须正确!)
以后只要xcode启动起来就可以在lldb控制台使用layne_imagelookup.

--结束END--

本文标题: 使用Python扩展lldb

本文链接: https://www.lsjlt.com/news/190873.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Python扩展lldb
    Xcode集成了LLDB,进一步简化了程序调试流程。虽然LLDB很强大,但是它的命令很有限。所幸的是,lldb包含了对python的支持,使得lldb的拓展成为可能。本人在开发过程中很喜欢使用image lookup 命令,但是苦于每次只能...
    99+
    2023-01-31
    Python lldb
  • Python 扩展使用 C/C++ 给
    本文来自作者 gashero 在 GitChat 上分享「Python 的 C 扩展开发惯例」,「阅读原文」查看交流实录 「文末高能」 编辑 | 嘉仔 目录 1   简介    1.1   Python扩展模块的用途和优点 ...
    99+
    2023-01-31
    Python
  • python扩展
    补充一些有趣的知识   1. sys模块方法的补充,打印进度条 import sys,time for i in range(20): sys.stdout.write("#") sys.stdout.flush() ...
    99+
    2023-01-31
    python
  • 为Python创建扩展,使python能
    在架构服务器的时候,使用了IOCP来收发数据,使用Python写解包入库程序,那么要让两个进程通信,有很多方法,这里使用了内存共享的方法 python本来没有内存共享(我没有找到,也不知道是不是真的没有,但是和C++的程序共享内存,我想确实...
    99+
    2023-01-31
    Python python
  • python之扩展
    17.2 非常简单的途径:Jython 和 IronPython 一个简单的java类public class JythonTest{ public void greeting(){ System.out.println("Hello,wo...
    99+
    2023-01-31
    python
  • 我所使用的Python扩展程序 for
    ActivePython-3.1.3.5-win32-x86.msi bzr-2.3.1.win32-py2.6.exe CherryPy-3.2.0-py2.win32.exe dreampie-1.1.1-...
    99+
    2023-01-31
    我所 程序 Python
  • 如何使用ptpython扩展标准Python外壳
    这篇文章主要介绍了如何使用ptpython扩展标准Python外壳,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用ptpython扩展标准Python外壳如果你一直想知道为...
    99+
    2023-06-27
  • ASP.NET Core扩展库之Http通用扩展库的使用详解
    目录一、开启服务端请求缓冲 二、请求头传递 三、请求头日志的记录 四、Http消息上的扩展方法 五、HttpClient上的扩展方法     ...
    99+
    2024-04-02
  • python去除扩展名
    获取不带扩展名的文件的名称:   import os printos.path.splitext("path_to_file")[0]     from os.path import basename # now you can call...
    99+
    2023-01-31
    扩展名 python
  • 怎么使用Kotlin来扩展
    今天小编给大家分享一下怎么使用Kotlin来扩展的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。实际上客户早在去年年初的时候便...
    99+
    2023-06-17
  • Python使用conda如何安装requirement.txt的扩展包
    目录使用conda安装requirement.txt的扩展包生成requirements.txt文件安装requirement.txt文件的扩展包生成requirement.txt及...
    99+
    2023-02-02
    Python conda requirement.txt扩展包 安装requirement.txt扩展包
  • Python 字符串扩展
    Python 字符串扩展,按照字符串处理效果整理一、修改字符串字符:---------------------------------------------------1)str.capitalize()    返回字符串的副本,其中第一...
    99+
    2023-01-31
    字符串 Python
  • python中input()的用法及扩展
    目录input() 的用法Python3.x 中Python2.x 中扩展—将控制台输入的字符串转化成列表input函数的高级使用输入一个数10回车输入30回车查看类型另...
    99+
    2024-04-02
  • php7中如何使用mysqli扩展
    今天就跟大家聊聊有关php7中如何使用mysqli扩展,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。因为php7安装目录中没有php.ini文件所以可以复制php.ini-devel...
    99+
    2023-06-20
  • 怎么使用PostgreSQL扩展函数
    这篇文章主要讲解了“怎么使用PostgreSQL扩展函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用PostgreSQL扩展函数”吧!例子.&nb...
    99+
    2024-04-02
  • Javascript中Array扩展如何使用
    这篇文章将为大家详细讲解有关Javascript中Array扩展如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Javascript中的Array扩展...
    99+
    2024-04-02
  • 如何使用PHP的runkit扩展
    这篇文章主要介绍了如何使用PHP的runkit扩展,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php的框架有哪些php的框架:1、Laravel,Laravel是一款免费并...
    99+
    2023-06-15
  • 如何使用 PHP 函数扩展?
    通过编写 php 扩展模块,可以添加新函数或修改现有函数,实现自定义需求。具体步骤包括:创建 php 源代码文件;使用 phpize 初始化扩展;运行 configure 脚本生成 ma...
    99+
    2024-04-16
    函数 php扩展
  • Mac 使用brew安装phpredis扩展
    概念:  phpredis扩展是一个用于PHP语言的Redis客户端扩展,它提供了一组PHP函数,用于与Redis服务器进行交互。Redis是一个开源的内存数据结构存储系统,可用于缓存、消息队列、发布/订阅和分布式锁等应用场景。 phpre...
    99+
    2023-09-18
    redis 数据库 缓存 php
  • 2019-02-18 扩展Python控
    "中文编程"知乎专栏原文地址 续前文扩展Python控制台实现中文反馈信息, 实现了如下效果: >>> 学 Traceback (most recent call last): File "<console&...
    99+
    2023-01-30
    Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作