lldb

iOS SpringBoard tweak插件,双击图标快速启动debugserver

混江龙づ霸主 提交于 2020-04-11 13:21:05
debugserver+lldb很好用,但启动起来太麻烦?我们开发了一款iOS SpringBoard tweak小插件,简化debugserver启动过程。老铁,请双击! 0x00 懒是第一生产力 我们经常要通过debugserver对App进行调试,有 书籍 和 论坛 对相关的技术和实践进行了说明,但实际应用起来还是有些麻烦。先要重签拷贝,再要启动终端ssh到iPhone启动debugserver,各种ls加grep找到想调试的应用,敲命令启动debugserver,然后Mac本地终端启动lldb。这样折腾下来,至少要开两个终端,有的时候甚至更多。GitHub上有个 issh工具 对上述操作有封装和优化,但是还是需要敲命令找App,再运行debugserver。 所以做个tweak提升一下生产力。只需 双击应用图标,即可一键启动debugserver 。 代码见:Github https://github.com/TalkingDat... 运行界面 我们所用的开发环境是iOS 13.3,但是并没有用到特殊版本的API,低版本手机应该也OK。 下面简单分享开发过程: 0x01 通过图标找到应用执行路径 从界面找逻辑,逆向发现SpringBoard的图标是 SBIconView 。并且有一个叫属性 applicationBundleIdentifierForShortcuts

百度App iOS工程化实践: EasyBox破冰之旅

半世苍凉 提交于 2020-04-05 22:32:58
本文作者:yanxin1563 本文作者: Yunpeng-基础技术 前言 百度App从单一的搜索工具发展到今天以搜索和Feed流为双引擎的综合性内容消费服务平台,其复杂程度已然不可同日而语矣。 作为一个日活过亿的超级App,业务规模庞大,相关技术人员超过千人,客户端支持主流的移动技术,涉及近百业务方,技术形态复杂,各种组件近三百个,代码百万量级,由此带来的工程化问题是技术团队的一个极大挑战。 项目的膨胀导致了很多不起眼的小问题被无限放大,组件管理不规范、编译时间长、工程文件合并冲突、Xcode默认非彻底编译隔离等等问题,导致开发人员在开发环境上耗费了大量时间。目前业界较流行的工具对于大规模工程的支持力度相对较弱,实践起来总是有些掣肘,难以达到理想状态。 EasyBox的诞生,就是致力于为超级App量身打造一套现代、高效、优雅的研发工具链。 这篇文章的主要目的是 站在工具链的角度 上,分享一下我们在实践工程化过程中一些经验。 概述 EasyBox主体由工程组装器(Installer)、多仓库管理工具(MGit)、二进制管理工具(LFS)三部分构成,分别负责工作区的构建(组件依赖分析、工程的生成与组合)、源码仓库的管理以及二进制的管理。EasyBox架构图: 由多仓库管理工具克隆所需仓库源码,由二进制管理工具下载二进制包,然后组装器根据描述表生成对应工程

说说XcodeLLDB调试的那些事儿

非 Y 不嫁゛ 提交于 2020-03-27 06:29:28
使用场景之一,接收他人的项目,快速理清其层次结构,可以打标识符断点,如下图 每一个VC,都加了个在viewDidLoad方法处的断点,这样运行程序时,逐步断点,便可以理清层次, 但是,需要手动不断的继续,依旧不是很好 如果使用LLDB,就事半功倍~ 先上效果图 LIDB简史 Xcode5之前的调试器使用的是GDB,如果你不幸使用,那感觉简直了~然后伴随着Xcode5的发布,LLDB调试器取而代之,成为Xcode工程中默认的调试器,它和LVVM编译器一起,带给开发者丰富的流程控制和数据检测的调试功能.LLDB为Xcode提供了底层调试环境,其中,包括内嵌在Xcode IDE中的调试区域的控制面板,在这里我们可以直接调用LLDB命令. chisel facebook团队良心出品的LLDB扩展 chisel 安装(需已有Homebrew,其安装很易,如若困惑可私信,这里不展开说明) brew update brew install chisel 安装结束后会打印出路径如 /usr/local/opt/chisel/libexec/fblldb.py 添加下述命令行到 ~/.lldbinit file vi ~/.lldbinit ... command script import /path/to/fblldb.py _ 注意: _要将将上述 /path/to/fblldb.py

Chisel-LLDB命令插件,让调试更Easy

天涯浪子 提交于 2020-03-26 08:13:37
http://blog.cnbluebox.com/blog/2015/03/05/chisel/ LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的开源调试器。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。调试器允许你在程序运行的特定时暂停它,你可以查看变量的值,执行自定的指令,并且按照你所认为合适的步骤来操作程序的进展。( 这里 有一个关于调试器如何工作的总体的解释。) 相信每个人或多或少都在用LLDB来调试,比如 po 一个对象。LLDB的是非常强大的,且有内建的,完整的 Python 支持。今天我们主要介绍一个 facebook 开源的 lldb 插件 Chisel。可以让你的调试更Easy. 1.安装Chisel 源码地址: Chisel Chisel 使用 homebrew 来安装,如果你没有安装homebrew, 参考 homebrew 。 1 2 brew update brew install chisel 安装完成按照安装日志上的提示,在 ~/.lldbinit 文件中添加一行,没有则新建。 提示类似如下: 1 2 3 ==> Caveats Add the following line to ~/.lldbinit to load chisel when Xcode launches: command script

调试工具Chisel-LLDB插件

左心房为你撑大大i 提交于 2020-03-26 08:01:49
Chisel-LLDB命令插件 相信每个人或多或少都在用LLDB来调试,比如 po 一个对象。LLDB的是非常强大的,且有内建的,完整的 Python 支持。今天我们主要介绍一个 facebook 开源的 lldb 插件 Chisel。可以让你的调试更Easy. 1.安装Chisel 源码地址: Chisel Chisel 使用 homebrew 来安装,如果你没有安装homebrew, 参考 homebrew 。 1 2 brew update brew install chisel 安装完成按照安装日志上的提示,在 ~/.lldbinit 文件中添加一行,没有则新建。 提示类似如下: 1 2 3 ==> Caveats Add the following line to ~/.lldbinit to load chisel when Xcode launches: command script import /usr/local/opt/chisel/libexec/fblldb.py 做好上面的步骤,然后重启Xcode就可以尝试下了。 2.内置命令 Chisel 为lldb提供了新增的便捷命令,是非常实用的命令 2.1 pviews 这个命令可以递归打印所有的view,并能标示层级,相当于 UIView 的私有辅助方法 [view recursiveDescription]

Chisel_LLDB调试命令

拟墨画扇 提交于 2020-03-26 06:41:36
Chisel-LLDB命令插件,让调试更Easy LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的开源调试器。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。调试器允许你在程序运行的特定时暂停它,你可以查看变量的值,执行自定的指令,并且按照你所认为合适的步骤来操作程序的进展。( 这里 有一个关于调试器如何工作的总体的解释。) 相信每个人或多或少都在用LLDB来调试,比如 po 一个对象。LLDB的是非常强大的,且有内建的,完整的 Python 支持。今天我们主要介绍一个 facebook 开源的 lldb 插件 Chisel。可以让你的调试更Easy. 1.安装Chisel 源码地址: Chisel Chisel 使用 homebrew 来安装,如果你没有安装homebrew, 参考 homebrew 。 1 2 brew update brew install chisel 安装完成按照安装日志上的提示,在 ~/.lldbinit 文件中添加一行,没有则新建。 提示类似如下: 1 2 3 ==> Caveats Add the following line to ~/.lldbinit to load chisel when Xcode launches: command script import /usr/local/opt

lldb affecting rcx value upon EXC_SYSCALL

浪尽此生 提交于 2020-03-24 00:58:08
问题 I noticed that upon an invalid 64bit MacOS syscall xor eax,eax syscall ;lldb stops here after the syscall When lldb stops the process while single stepping on: thread #1, stop reason = EXC_SYSCALL (code=5797, subcode=0x1) The rcx is equal to rsp . However when lldb is not attached or is not single stepping rcx is equal to expected return address after the syscall (i.e. is exactly of the same value as rip in user space). Is this some kind of a bug / side effect? I'm observing this on MacOS 10

LLDB调试器

血红的双手。 提交于 2020-03-20 22:57:10
#LLDB调试器 ###简介 你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? ``` NSLog(@"%@", password); ``` 或者跳过一个函数调用来简化程序的行为? 实际应该调用这个函数:Foo() ``` NSNumber *n = @7; //complexCalculate() ; ``` 或者伪造一个函数实现? ``` int complexCalculate { return 9; /* 万行代码. ... } ``` 并且每次必须重新编译,从头开始? 构建软件是复杂的,并且 Bug 总会出现。一个常见的修复周期就是修改代码,编译,重新运行,并且祈祷出现最好的结果。 但是不一定要这么做。你可以使用调试器。而且即使你已经知道如何使用调试器检查变量,它可以做的还有很多。 这篇文章将试图挑战你对调试的认知,并详细地解释一些你可能还不了解的基本原理,然后展示一系列有趣的例子。 ###基础 如图所示,当我们在程序的301行打上断点的时候,触发这段代码,程序就会进入lldb的调试模式.运行我们和调试器进行交互.这时候我们可以做些什么呢? ###help 最简单命令是 help,它会列举出所有的命令。如果你忘记了一个命令是做什么的,或者想知道更多的话,你可以通过 help来了解更多细节,例如 help print 或者 help thread。如果你甚至忘记了

Swift 使用 LLDB 调试命令

瘦欲@ 提交于 2020-03-19 04:35:17
swift 和 oc 的语法不一样: Xcode 调试技巧之 Swift 篇 打印和赋值,观察数值变量和view对象属性 p指令可打印其对象类型、内存地址以及该对象的值等具体信息, po指令则是打印其调用description方法得到的值。 e 赋值指令(后面有例子详解) 流程控制 n 命令,代表 Step Over 操作。 s 命令,代表 Step Into 操作。 finish 命令,代表 Step Out 操作。 c 命令,代表恢复程序执行操作。 修改指针变量的值,观测程序不同变化 程序中: testThreadReturn = “testThreadReturn” (lldb) p testThreadReturn (String) $R2 = "testTheardReturn" (lldb) e testThreadReturn = "zaozuo" (lldb) p testThreadReturn (String) $R4 = "zaozuo" 动态修改view的属性 Thread Return,函数设置断点返回值(swift不兼容) 这个在OC一切ok,在swift还不能用会有以下错误 (lldb) thread return "zaozuo-return" error: Error returning from frame 0 of thread 1: We

(转载)与调试器共舞

瘦欲@ 提交于 2020-03-10 16:46:26
你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? NSNumber *n = @7; // 实际应该调用这个函数:Foo(); 或者短路一个逻辑检查? if (1 || theBooleanAtStake) { ... } 或者伪造一个函数实现? int calculateTheTrickyValue { return 9; /* 先这么着 ... } 并且每次必须重新编译,从头开始? 构建软件是复杂的,并且 Bug 总会出现。一个常见的修复周期就是修改代码,编译,重新运行,并且祈祷出现最好的结果。 但是不一定要这么做。你可以使用调试器。而且即使你已经知道如何使用调试器检查变量,它可以做的还有很多。 这篇文章将试图挑战你对调试的认知,并详细地解释一些你可能还不了解的基本原理,然后展示一系列有趣的例子。现在就让我们开始与调试器共舞一曲华尔兹,看看最后能达到怎样的高度。 LLDB LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的 开源 调试器。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。调试器允许你在程序运行的特定时暂停它,你可以查看变量的值,执行自定的指令,并且按照你所认为合适的步骤来操作程序的进展。( 这里