研发效能是一个涉及面很广的话题,它涵盖了软件交付的整个生命周期,涉及产品、架构、开发、测试、运维,每个环节都可能影响顺畅、高质量地持续有效交付。在腾讯安全平台部实际研发与测试工作中我们发现,代码插桩隔离是单元测试工作中的一个强需求,然而业界现有 C/C 插桩工具由于使用上的局限性,运行效率和体验仍有很大改善空间。本文介绍了团队基于研效优化实践而自研的动态插桩工具,旨在实现单元测试的轻量化运行,提高
转载
2023-12-20 19:53:46
88阅读
转载
2024-01-29 10:48:18
8阅读
第二章注解深入浅出三、插桩3.1 什么是插桩3.2 字节码操作框架3.3 ASM 的使用 三、插桩3.1 什么是插桩QQ 空间曾经发布的《热修复解决方案》中利用 Javaassist 库实现向类的构造函数中插入一段代码解决 CLASS_ISPREVERIFIED 问题。包括了 Instant Run 的实现以及参照 Instant Run 实现的热修复美团 Robus 等都利用到了插桩技术。插桩
转载
2023-10-11 15:40:10
286阅读
现如今,编译插桩技术已经深入 Android 开发中的各个领域,而 AOP 技术正是一种高效实现插桩的模式,它的出现正好给处于黑暗中的我们带来了光明,极大地解决了传统开发过程中的一些痛点,而 AspectJ 作为一套基于 Java 语言面向切面的扩展设计规范,能够赋予我们新的能力。在这篇文章中我们将来学习如何使用&nb
在这篇博文中,我将深入探讨“python插桩是什么”这一主题,从背景到解决方案,逐步解析涉及的各个方面,以助于读者更好地理解这一概念及其应用。
在现代软件开发中,尤其是在Python环境中,插桩(instrumentation)通常指的是在软件中添加监测代码,以收集性能数据、日志信息和运行状态等。这一过程有助于开发者监控应用程序的运行情况,发现潜在问题,提高系统的可维护性。
### 问题背景
原本是想写一篇介绍字节码插桩的文章,但无奈的是使用字节码插桩之前需要使用到自定义 Gradle Plugin,似乎暗示着这篇文章并不会短。 在了解字节码插桩之前,我们先了解编译插桩。编译插桩是什么相信大家都使用过 ButterKnife,了解过它原理的都知道,它是在编译期间生成相应的 java 文件,到运行时,通过反射机制去获取该生成类,并调用其绑定方法,从而做到控件绑定。(什么?你还没了解过 B
转载
2024-06-04 05:18:08
59阅读
程序插桩技术最早是由J.C. Huang 教授提出的, 它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些
探针
(又称为“探测仪”),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。 由于程序插桩技术是在被测程序中插入探针,然后通过探针的执行来获得程序的控制流和数
转载
2024-01-05 22:24:12
68阅读
目录3.2 程序插桩法3.2.1 目标代码插桩3.2.2 源代码插桩小提示:HeisenBugs黑盒测试和白盒测试的异同3.2 程序插桩法程序插桩法是一种被广泛使用的软件测试技术,由J.C.Huang教授提出。简单来说,程序插桩就是往被测试程序中插入测试代码以达到测试目的的方法,插入的测试代码被称为探针。根据测试代码插入的时间可以将程序插桩法分为目标代码插桩和源代码插桩。3.2.1 目标代码插桩目
转载
2023-11-03 09:31:21
19阅读
简介ASM插桩在网上其实已经有很多资料了,我之所以再写这篇文章呢,一是因为好久前学习的ASM,现在已经忘的差不多了,需要再回顾一下,二来是记录一下学习过程,以后如果再有细节记不清楚可以很方便的就能查到,三来再学习的过程中也踩了一些坑,收获了一些心得,这些也需要一个地方记录一下。好了,废话就说到这里,接下来开始正文。插桩技术指在保证原有程序逻辑完整性的基础上,在程序中插入探针,通过探针采集代码中的信
转载
2023-10-04 11:46:17
160阅读
当启动插桩测试时,系统会重启其目标软件包,并且会注入和启动插桩代码以执行测试。一种例外情况是,这里的目标软件包不能是 Android 应用框架本身,即软件包 android,因为这样做会导致出现一种矛盾情况:需要重启 Android 框架,而正是该框架支持系统功能,包括插桩本身。这意味着,插桩测试无法将本身注入到 Android 框架(也称为系统服务器)以执行测试。为了测试 Android 框架,
转载
2023-11-22 21:51:06
152阅读
静态代码插桩函数覆盖获取当前执行函数的信息保存符号静态插桩作用 代码插桩是指根据一定的策略在代码中插入桩点来统计代码覆盖的技术手段.一般可以分为三个粒度: 函数(function): 按照函数为单位进行插桩;基本块(basic block): 按照代码执行单元进行分组的执行单元,单元内部的代码执行次数一定是相同的;边界(Edge): 按照代码执行路径进行插桩。针对iOS来说,clang支持以上
转载
2024-01-10 19:07:54
204阅读
程序插装方法简介 程序插装方法简单地说是通过往被测程序中插入操作来实现测试目的的方法。 需要考虑的问题 a. 探测哪些信息 b. 在程序的什么部位设置探测点 c. 需要设置多少个探测点断言语句 在程序中的特定部位插入某些用以判断变量特性的语句(类型、数值)程序变异与前面提到的结构测试和功能测试都不一样,它是一种错误驱动测试。(针对某类特定程序错误) 找出程序中所有的错误几乎是不可能的。解决办法是将
转载
2024-04-13 07:57:46
58阅读
目录为了更加精确的追踪方法调用,优化性能,可以通过 Debug 类生成插桩日志,在 Profiler 面板中导入后进行分析。一、生成插桩日志1. 工具类封装2. 示例中调用3. 模拟耗时二. 导出日志,分析数据1. 在 Device File Explorer 面板中找到自己的应用目录下的 xxx.trace 文件,右键 Save as 保存到自己指定的目录中,比如桌面2. 然后打开 Profi
转载
2023-10-10 17:23:34
121阅读
背景在做应用启动速度优化时,需先了解启动阶段做了哪些耗时任务,分析 Application 的 attachBaseContext、onCreate 等关键方法,统计它们内部调用到的其他方法耗时。分析要结合 systrace 工具,因为不仅要知道方法的 wall time,还要知道 cpu time,这样才能知道是否属于 cpu 密集型任务,然后针对任务类型进行调整或线程调度。需求很清晰,在要统计
转载
2023-10-15 10:54:44
171阅读
经验总是不停刨坑刨出来的,最近结合工作需要并熟悉学习android ASM 字节码插桩的环境下,开发了一个方法 hook 的插件,虽然在各方其他开源项目的参考下,还是刨了不少坑,下面就来记录下。gradle 知识点记录–dry-run 查看gradle task执行顺序,验证插件是否被执行时有用。 –stacktrace 查看详细堆栈,报错时可以看到插件代码错误的位置。ASM开发相关注意基本类型中
转载
2023-11-09 17:05:08
147阅读
8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?何为代码插桩 最早是由J.C. Huang 教授提出的,它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(又称为“探测仪”,本质上就是进行信息采集的代码段,可以是赋值语或采集覆盖信息的函数调用,通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态
转载
2023-07-06 16:00:29
166阅读
一、什么是插桩QQ空间曾经发布的《热修复解决方案》中利用 Javaassist库实现向类的构造函数中插入一段代码解决CLASS_ISPREVERIFIED 问题。包括了Instant Run的实现以及参照Instant Run实现的热修复美团Robus等都利用到了插桩技术。插桩就是将一段代码插入或者替换原本的代码。字节码插桩顾名思义就是在我们编写的源码编译成字节码(Class)后,在Android
转载
2023-11-07 00:29:41
128阅读
目录1.插桩是什么 2.插桩的作用 3.插桩的原理 4.插桩方案对比 5.AspectJ 耗时统计实践 6.ASM 耗时统计实践 7.插桩编译 Gradle Transform 8.ASM的更多用法 9.MethodTraceMan插桩是什么插桩就是在代码编译期间修改已有的代码或者生成新代码插桩的作用插桩可以做什么?减少代码的重复编写无痕埋点对全局所有class插桩,做UI,内存,网络等等方面的性
转载
2024-07-25 16:10:35
104阅读
一、为什么要插桩 我们都知道JAVA是面向对象(继承、封装、多态),而插桩的意义在于面向切面(AOP),可想而知单方面的面向对象开发有许多的局限性,而结合面向切面编程可以说补足了我们的这种局限性。举个例子:在onClick中一般都要做防抖动操作,这样是为了避免多次打开页面的问题。一般实现的话是在每个onClick实现第二次点击的时候加个时间判断
转载
2023-10-23 06:43:26
124阅读
一、AOP概念Android AOP就是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,提高开发效率。二、Android代码的编译过程以及插桩位置三、AOP方案对比3.1 AspectJAspectJ 的作为一个老牌的插桩框架优点是 1 成熟稳定 2 使用简单。但是 Aspect
转载
2023-08-29 17:43:45
175阅读