xml地图|网站地图|网站标签 [设为首页] [加入收藏]

OCLint如何自定义静态扫描代码规则,如何调试O

来源:http://www.ccidsi.com 作者:集成介绍 人气:147 发布时间:2020-04-20
摘要:1.1 下载源代码 直接clone oclint自定义规则的编辑,平时我们会生成xcode工程,然后开展编码,build之后会输出dylib。假使大家要验证法则的对的,只可以把dylib拷贝到rules的目录中,然后在

1.1 下载源代码

直接clone

oclint自定义规则的编辑,平时我们会生成xcode工程,然后开展编码,build之后会输出dylib。假使大家要验证法则的对的,只可以把dylib拷贝到rules的目录中,然后在進展测量检验。那样事实上是很费劲,也必须要通过log来输出消息,可是clang的章程那么多,单靠log格局也不便于调节和测量检验。于是在想怎样在XCode中张开调治将养。但搜了无数措施,一向没成功。

一、开辟筹算

1.2 创设编写翻译oclint

进去oclint-scripts文件夹,实施,命令./make,此进度要点时间,奉行该命令在此之前须求设置cmake;恐怕会遇见提示装置openssl,brew install openssl;或许会遇上提醒设置ninjia,brew install ninjia。那个大概会超越的标题,按命令行难题提醒,管理掉就好,如果编译战败,将无法进入下边包车型地铁步子。

安装成功后,大家得以用xcode来处理,开拓调节和测量检验种种走查准绳,且大家的每一种法规都以三个scheme,编写翻译时,能够只接收特定某准绳调试,生成对应的dylib,那样编写翻译速度快,那是自身一度配备好的xcode调试工程,如图:

皇家娱乐网址 1image.png

新建该projcet命令:

//在OCLint源码目录下建立了一个文件夹,命名为oclint-kgclang-rulesmkdir oclint-kgclang-rulescd oclint-kgclang-rules

cmake -G Xcode -D CMAKE_CXX_COMPILER=../build/llvm-install/bin/clang   -D CMAKE_C_COMPILER=../build/llvm-install/bin/clang -D OCLINT_BUILD_DIR=../build/oclint-core -D OCLINT_SOURCE_DIR=../oclint-core -D OCLINT_METRICS_SOURCE_DIR=../oclint-metrics -D OCLINT_METRICS_BUILD_DIR=../build/oclint-metrics -D LLVM_ROOT=../build/llvm-install/ ../oclint-rules

那么接下去,大家就足以张开,运营该工程。你会意识其间早就合併了重重oclint开辟的自定义走查脚本,这是极好的求学参谋资料。具体,***/oclint/oclint-kgclang-rules目录里面有oclint已经自定义的本子,这是多个方可build的xcode工程,可是这两天还不可能调解,因大家的沙盘是dylib动态链接库,这几个动态链接库能够三回性编写翻译,也足以接收单个项目单独编写翻译。如下图:

皇家娱乐网址 2image.png

那边有叁个方案:OCLint自定义准绳的调治方法,可是不驾驭他的oclintexe是怎么写的,小编要好尝尝新建Command Line Tool的工程,然后用NSTask调起oclint的下令,依旧未能断点到,大概是笔者的落到实处有标题。

1、MacOS平日默许都有Xcode,Git和Ruby

2.1 静态走查准则的动态链接库调节和测验

昨天dylib,要求主程序来辅导迷津运维,配置如下。

皇家娱乐网址 3image.png

备考:运转引导工程要求用/Users/ganvinalix/oclint/build/oclint-release/bin/oclintExe ,oclintExe为oclint的正片。

皇家娱乐网址 4image.png

皇家娱乐网址,通过xcode配置

皇家娱乐网址 5image.png

选料本人拷贝的oclint编写翻译结果oclintExe(必供给编译oclint成功后才有该公文夹)

皇家娱乐网址 6image.png

接下去还亟需安插入口调节和测验参数(oclint可试行文件的输入参数):

皇家娱乐网址 7image.png 命令如下:

-R=/Users/ganvinalix/oclint/oclint-kgclang-rules/rules.dl/Debug /Users/ganvinalix/oclint/oclint-kgclang-rules/debug.m -- -x objective-c 

情趣是,在大家同心同德oclint-kgclang-rules工程下新建三个调度文件debug.m。

皇家娱乐网址 8image.png

思虑好用demo中的准则来检查实验我们的debug.m文件呢。如何调治本人工程呢? 自个儿的工程往往文件是信任的,所以须求把信赖音讯一同作为参数字传送递进来。

 -R=/Users/ganvinalix/oclint/oclint-kgclang-rules/rules.dl/Debug /Users/ganvinalix/Desktop/TestOClintProject/TestOClintProject/ViewController.m -- -x objective-c -arch x86_64 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu11 -fobjc-arc -fobjc-weak -fmodules -gmodules -fmodules-cache-path=/Users/ganvinalix/Library/Developer/Xcode/DerivedData/ModuleCache.noindex -fmodules-prune-interval=86400 -fmodules-prune-after=345600 -fbuild-session-file=/Users/ganvinalix/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/Session.modulevalidation -fmodules-validate-once-per-build-session -Wnon-modular-include-in-framework-module -Werror=non-modular-include-in-framework-module -Wno-trigraphs -fpascal-strings -O0 -fno-common -Wno-missing-field-initializers -Wno-missing-prototypes -Werror=return-type -Wdocumentation -Wunreachable-code -Wno-implicit-atomic-properties -Werror=deprecated-objc-isa-usage -Werror=objc-root-class -Wno-arc-repeated-use-of-weak -Wimplicit-retain-self -Wduplicate-method-match -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wconditional-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-float-conversion -Wnon-literal-null-conversion -Wobjc-literal-conversion -Wshorten-64-to-32 -Wpointer-sign -Wno-newline-eof -Wno-selector -Wno-strict-selector-match -Wundeclared-selector -Wdeprecated-implementations -DDEBUG=1 -DOBJC_OLD_DISPATCH_PROTOTYPES=0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator11.4.sdk -fasm-blocks -fstrict-aliasing -Wprotocol -Wdeprecated-declarations -mios-simulator-version-min=11.4 -g -Wno-sign-conversion -Winfinite-recursion -Wcomma -Wblock-capture-autoreleasing -Wstrict-prototypes -Wunguarded-availability -fobjc-abi-version=2 -fobjc-legacy-dispatch -index-store-path /Users/ganvinalix/Library/Developer/Xcode/DerivedData/TestOClintProject-dborgnvcnbtwmndeqnvmjirynvrt/Index/DataStore -iquote /Users/ganvinalix/Library/Developer/Xcode/DerivedData/TestOClintProject-dborgnvcnbtwmndeqnvmjirynvrt/Build/Intermediates.noindex/TestOClintProject.build/Debug-iphonesimulator/TestOClintProject.build/TestOClintProject-generated-files.hmap -I/Users/ganvinalix/Library/Developer/Xcode/DerivedData/TestOClintProject-dborgnvcnbtwmndeqnvmjirynvrt/Build/Intermediates.noindex/TestOClintProject.build/Debug-iphonesimulator/TestOClintProject.build/TestOClintProject-own-target-headers.hmap -I/Users/ganvinalix/Library/Developer/Xcode/DerivedData/TestOClintProject-dborgnvcnbtwmndeqnvmjirynvrt/Build/Intermediates.noindex/TestOClintProject.build/Debug-iphonesimulator/TestOClintProject.build/TestOClintProject-all-target-headers.hmap -iquote /Users/ganvinalix/Library/Developer/Xcode/DerivedData/TestOClintProject-dborgnvcnbtwmndeqnvmjirynvrt/Build/Intermediates.noindex/TestOClintProject.build/Debug-iphonesimulator/TestOClintProject.build/TestOClintProject-project-headers.hmap -I/Users/ganvinalix/Library/Developer/Xcode/DerivedData/TestOClintProject-dborgnvcnbtwmndeqnvmjirynvrt/Build/Products/Debug-iphonesimulator/include -I/Users/ganvinalix/Library/Developer/Xcode/DerivedData/TestOClintProject-dborgnvcnbtwmndeqnvmjirynvrt/Build/Intermediates.noindex/TestOClintProject.build/Debug-iphonesimulator/TestOClintProject.build/DerivedSources/x86_64 -I/Users/ganvinalix/Library/Developer/Xcode/DerivedData/TestOClintProject-dborgnvcnbtwmndeqnvmjirynvrt/Build/Intermediates.noindex/TestOClintProject.build/Debug-iphonesimulator/TestOClintProject.build/DerivedSources -F/Users/ganvinalix/Library/Developer/Xcode/DerivedData/TestOClintProject-dborgnvcnbtwmndeqnvmjirynvrt/Build/Products/Debug-iphonesimulator -MMD -MT dependencies -MF /Users/ganvinalix/Library/Developer/Xcode/DerivedData/TestOClintProject-dborgnvcnbtwmndeqnvmjirynvrt/Build/Intermediates.noindex/TestOClintProject.build/Debug-iphonesimulator/TestOClintProject.build/Objects-normal/x86_64/ViewController.d --serialize-diagnostics /Users/ganvinalix/Library/Developer/Xcode/DerivedData/TestOClintProject-dborgnvcnbtwmndeqnvmjirynvrt/Build/Intermediates.noindex/TestOClintProject.build/Debug-iphonesimulator/TestOClintProject.build/Objects-normal/x86_64/ViewController.dia -c /Users/ganvinalix/Desktop/TestOClintProject/TestOClintProject/ViewController.m -o /Users/ganvinalix/Library/Developer/Xcode/DerivedData/TestOClintProject-dborgnvcnbtwmndeqnvmjirynvrt/Build/Intermediates.noindex/TestOClintProject.build/Debug-iphonesimulator/TestOClintProject.build/Objects-normal/x86_64/ViewController.o

这般长,何地来的?其实正是我们用xcode build的build log音讯,上边的例子是调治笔者demo工程TestOClintProject下的ViewControlle.m文件,实际支付中是须求调养走查的一定项指标工程文件,能够说项目里面包车型客车任何个中叁个.m文本都以有好多代码库依赖的,所以要求把具备的build信息包进来。

皇家娱乐网址 9image.png

新兴又开采了三个答案,How to launch OCLint in xcode with debug model.,也是钻探什么在xcode中进行调养的。一在那以前没理解答案中步骤的意味,一向无果,猛然有一天开窍了。used the cmake tool, create xcode project with each module,看到了each module。然后就想开,在开创rule的时候,不也是透过以下cmake命令生成的xcode工程,LLVM_ROOT指向的是oclint-rules。

2、下载OCLint代码

OCLint-Github地址

皇家娱乐网址 10

筛选下载

下载到本地的目录如下:

皇家娱乐网址 11

目录

2.2 自定义静态代码走查准则

事情发生前大家是用oclint-kgclang-rules本来就有的子项目调节和测量检验运维。现在我们团结新扩张子项目。新添步骤如下,A.怎么着新添子项目以自家的二个走查脚本为例,生成多个名字为ViewCtrlMustHavePageID类型是AS电视isitor的法则模板,oclint根目录试行命令

oclint-scripts/scaffoldRule ViewCtrlMustHavePageID -t ASTVisitor

奉行后会在/Users/ganvinalix/oclint/oclint-rules/rules/custom/下坐褥大家温馨定义的插件脚本,以cmake管理的,借使不懂cmake能够先不用理会它。

皇家娱乐网址 12image.png

下一场重返我们的oclint-kgclang-rules oc工程下,重新实行命令,

#! /bin/sh -ecmake -G Xcode -D CMAKE_CXX_COMPILER=../build/llvm-install/bin/clang   -D CMAKE_C_COMPILER=../build/llvm-install/bin/clang -D OCLINT_BUILD_DIR=../build/oclint-core -D OCLINT_SOURCE_DIR=../oclint-core -D OCLINT_METRICS_SOURCE_DIR=../oclint-metrics -D OCLINT_METRICS_BUILD_DIR=../build/oclint-metrics -D LLVM_ROOT=../build/llvm-install/ ../oclint-rules

提议地点命令改成.sh脚本文件方便调用,如笔者的:/Users/ganvinalix/oclint/oclint-kgclang-rules/create-xcode-rules.sh ,一切顺遂的话能看出:

皇家娱乐网址 13image.png

再一次展开事前创设的OC工程,能够看见子项目现已新扩展成功了。

皇家娱乐网址 14image.png

按步骤2.1,给我们新添的子项目,也配上调节和测验参数。到此地,你的oclint已经能调解了。可是假诺不领会AST,照旧看不懂源的代码,也敬谢不敏顺遂完成走查须求的。当然如曾经铺好,到达目标地,只是时间的主题材料。

#! /bin/sh -ecmake -G Xcode  -D CMAKE_CXX_COMPILER=../build/llvm-install/bin/clang    -D CMAKE_C_COMPILER=../build/llvm-install/bin/clang  -D OCLINT_BUILD_DIR=../build/oclint-core  -D OCLINT_SOURCE_DIR=../oclint-core  -D OCLINT_METRICS_SOURCE_DIR=../oclint-metrics  -D OCLINT_METRICS_BUILD_DIR=../build/oclint-metrics  -D LLVM_ROOT=../build/llvm-install/ ../oclint-rules

3、cd进入oclint-scripts文件加,执行./make

要是没有报错的话,大致30分钟后编写翻译实现,大概进程是下载LLVM、clang的源代码,编写翻译LLVM、clang与OCLint的暗中同意准则。

皇家娱乐网址 15

编译结果

唯独貌似都会遇见有的标题:

本文由68399皇家赌场发布于集成介绍,转载请注明出处:OCLint如何自定义静态扫描代码规则,如何调试O

关键词: 68399皇家赌场 环境 规则 自定义 OC

最火资讯