首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

使用代码分析工具PMD检查Android Java代码缺陷

1.背景 使用代码分析工具PMD检查Android Java代码缺陷,本文是个整理。 介绍 PMD是一个静态源代码分析器。它找到常见的编程缺陷,如未使用的变量,空的catch块,不必要的对象创建等等。...PMD具有许多内置检查(在PMD术语,规则中),这些检查在规则参考中针对每种语言进行了记录。我们还支持广泛的API来编写您自己的规则,您可以使用Java或作为自包含的XPath查询来执行。...除其他外,PMD可以运行: 作为Maven的目标 作为Ant任务 作为Gradle任务 从命令行 官网地址 https://pmd.github.io/pmd/index.html 命令行方式使用 PMD...E4%BD%BF%E7%94%A8pmd Gradle 方式使用 PMD 的Demo https://github.com/vir56k/demo/tree/master/pmd/UsePMDByGradle...2.命令行方式使用 PMD 2.1 先了解使用手册 https://pmd.github.io/pmd/pmd_userdocs_installation.html#how-to-install-pmd-and-cpd

1.8K00

添加PMD插件扫描潜在的bug

上一节使用checkstyle来规范你的项目主要解决了代码编码规范问题,比如缩进换行等。这次继续代码健康工具类PMD。...它可以用来检查 潜在的bug:空的try/catch/finally/switch语句 未使用的代码:未使用的局部变量、参数、私有方法等 可选的代码:String/StringBuffer的滥用 复杂的表达式...在gradle中使用 gradle还是一贯的简单,新建pmd.gradle /** * The PMD Plugin * * Gradle plugin that performs quality.../gradlew build 报告位置: build/reports/pmd/main.html 在maven中使用 maven需要把ruleset放到resources下读取,如果是单moudle项目...未使用的代码(rulesets/unusedcode.xml)—— 查找从未使用的私有字段和本地变量、执行不到的语句、从未调用的私有方法,等等。

1.3K30

持续集成三 maven配置jacoco、checkstyle、findbugs、pmd

配置pmd 4....配置jacoco 5.执行指定版本 ---- 这几个工具的用途: checkstyle:检测代码规范 findbugs:检测代码不明显的语法错误,比如使用“==”比较字符串 pmd:扫描潜在问题,如未用过的局部变量...配置pmd 这个pmd一开始我看不太懂的,很多配置文件,第一个反应就是,这配置文件哪里有、怎么配、要自己写吗?...www.cnblogs.com/pixy/p/4718176.html 覆盖率为0的情况: 自动化配置四 Jenkins配置sonar 配置多模块覆盖率为0问题 如果是多个模块,可以把这些依赖放到父pom里,然后在运行的使用使用命令来执行...:pmd org.jacoco:jacoco-maven-plugin:prepare-agent -Dmaven.test.failure.ignore=true 在使用这些命令的时候使用 -Dmaven.test.failure.ignore

2.8K30

ARM32 页表映射

使用页面映射需要两层映射结构,页面的选择可以是64KB的大页面或4KB的小页面,如图2.4所示。Linux内核通常使用4KB大小的小页面。 ?...将这个12bit的物理地址和虚拟地址的低20bit拼凑在一起,就得到32bit的物理地址; 如果使用页面映射的方式,段映射表就变成了一级映射表(First Level table,在linux内核中成为...crate_mapping()函数就是为一个给定内存区间建立页表映射,这个函数使用map_desc数据结构来描述一个内存区间。...16个不同域,但在ARM Linux只定义和使用3个; #define DOMAIN_KERNEL 2 #define DOMAIN_TABLE 2 #define DOMAIN_USER 1 #define...512个页面表是给ARM硬件MMU使用的; 一次映射两个相邻的一级页表项,也就是对应的两个相邻的二级页表都存放在一个page中; 然后把这个PTE页面表的基地址通过__pmd_populate(

2.8K30

Linux内存管理--基本概念

Linux物理内存三级架构 对于内存管理,Linux采用了与具体体系架构不相关的设计模型,实现了良好的可伸缩性。它主要由内存节点node、内存区域zone和物理页框page三级架构组成。...Linux内核中使用数据结构pg_data_t来表示内存节点node。如常用的ARM架构为UMA架构。...• 内存区域zone 内存区域位于同一个内存节点之内,由于各种原因它们的用途和使用方法并不一样。...如基于IA32体系结构的个人计算机系统中,由于历史原因使得ISA设备只能使用最低16MB来进行DMA传输。又如,由于Linux内核采用 • 物理页框page 2....Linux虚拟内存三级页表 Linux虚拟内存三级管理由以下三级组成: • PGD: Page Global Directory (页目录) • PMD: Page Middle

1.6K90

1.ARMv8-A架构

TTBRx寄存器保存了第0级页表的基地址(L0 Table base address, Linux内核中称为PGD), L0页表中有512个表项(Table Descriptor),以虚拟地址的bit[...每个表项的内容含有下一级页表的基地址,即L1页表(Linux内核中称为PUD)的基地址。...PUD页表中有512个表项,以虚拟地址的bit[38:30]为索引值在PUD表中查找相应的表项,每个表项的内容含有下一级页表的基地址,即L2页表(Linux内核中称为PMD)的基地址。...PMD页表中有512个表项,以虚拟地址的bit[29:21]为索引值在PMD表中查找相应的表项,每个表项的内容含有下一级页表的基地址,即L3页表(Linux内核中称为PTE)的基地址。...索引值可以通过pte_index()来计算,最终会使用虚拟地址bit[20:12]来做索引值。 接下来以PAGE_SIZE即4KB大小为步长,通过while循环来设置PTE页表项。

95820

vmalloc原理与实现

Linux 系统中的每个进程都有独立 4GB 内存空间,而 Linux 把这 4GB 内存空间划分为用户内存空间(0 ~ 3GB)和内核内存空间(3GB ~ 4GB),而内核内存空间由划分为直接内存映射区和动态内存映射区...为什么需要vmalloc区 由于直接内存映射区(3GB ~ 3GB+896MB)是直接映射到物理地址(0 ~ 896MB)的,所以内核不能通过直接内存映射区使用到超过 896MB 之外的物理内存。...这时候就需要提供一个机制能够让内核使用 896MB 之外的物理内存,所以 Linux 就实现了一个 vmalloc 机制。...那么什么时候使用 vmalloc 呢?一般来说,如果要申请大块的内存就可以用vmalloc。...为了解决内核空间同步问题,Linux 并不是直接对当前进程的内核空间映射的,而是对 init 进程的内核空间(init_mm)进行映射,我们来看看 vmalloc_area_pages() 函数的实现:

1.5K10

Linux分页机制之分页机制的实现详解--Linux内存管理(八)

1 linux的分页机制 1.1 四级分页机制 前面我们提到Linux内核仅使用了较少的分段机制,但是却对分页机制的依赖性很强,其使用一种适合32位和64位结构的通用分页模型,该模型使用四级分页机制,即...1.3 为什么linux热衷:分页>分段 那么,为什么Linux是如此地热衷使用分页技术而对分段机制表现得那么地冷淡呢,因为Linux的进程处理很大程度上依赖于分页。...2 linux中页表处理数据结构 2.1 页表类型定义pgd_t、pmd_t、pud_t和pte_t Linux分别采用pgd_t、pmd_t、pud_t和pte_t四种数据结构来表示页全局目录项、页上级目录项...2.2 页表描述宏 参照arch/x86/include/asm/pgtable_64 linux使用下列宏简化了页表处理,对于每一级页表都使用有以下三个关键描述宏: 宏字段 描述 XXX_SHIFT...如果页中间目录项指向一个大型页(2MB或4MB),pmd_large(e)返回1,否则返回0。 宏pmd_bad由函数使用并通过输入参数传递来检查页中间目录项。

3.3K41

内核启动时为什么要做线性映射?

这么做的原因是为了访问效率,内核直接使用这些地址时,不需要重映射。并且这些地址是大页映射,tlb miss概率降低。一般来说,x86和arm64都是1G或者2M的大页。...注意:linux内核虽然在开机的时候,映射了(对于64为平台来说)所有物理内存,但是他并没占有这些内存,只是为了访问方便。 以下代码来自于:linux-5.15,ARM64架构。...= end);  398 } 以下函数用来分配pud页表项,注意他会调用 use_1G_block 来判断是否使用1G页表,如果条件为真,那么映射完毕,不需要走PMD和PTE了。...注意,对于一个典型ARM64 Linux架构来说,pte能映射2^9*4K = 2M地址空间。...注意,对于一个典型ARM64 Linux架构来说,pmd能映射2^9*2M = 1G地址空间。

66210

【内存管理】页表映射基础知识

,而是使用L1,L2,L3页表这种术语。...Domain:Domain域,指明所属的域,Linux中只使用了3个域。 bit31:bit10:指向二级页表基地址。 二级页表的表项 bit0:禁止执行标志。...而计算机地址总线却使用超过32位的,比如X86的就使用36位(64G)的地址总线,ARM使用的是48位(64G)的地址总线。...作为参数 如果页面错误不是写操作且内存管理子系统允许使用零页,则映射到零页面 生成一个特殊页表项,映射到专有的0页,一页大小 据pmd,address找到pte表对应的一个表项,并且lock住 如果页表项不为空...小结 从以上的分析中,我们可以学习到关于常用的页表的宏的使用方法。Linux内核就是这样,你不光可以看到某个函数的实现,还可以看到某个函数的调用过程。

8710

宋宝华: ARM64 Linux内核页表的块映射

内核文档Documentation/arm64/memory.rst描述了ARM64 Linux内核空间的内存映射情况,应该是此方面最权威文档。...所以,即便内核进行的就是PMD映射,在内存的分割上,还是可以以4K为单位的: ?...最后,值得一提的是,不仅线性映射区可以使用PMD映射,vmemmap映射区也是在4K页面情况下,默认用PMD映射的: ?...牧春童鞋在“Linux阅码场”这里还有一些精彩的文章: 宋牧春:Linux设备树文件结构与解析深度分析(1) 宋牧春:Linux设备树文件结构与解析深度分析(2) 宋牧春:多图详解Linux内存分配器...slub 宋牧春:Linux内核内存corruption检查利器KASAN实现原理 后面我们期待牧春专门写一篇文章来深入描述他的patchset。

3.3K10
领券