一、oclint的好處
OCLean代碼掃描工具OCLint是基於Clang的靜態分析工具,它可以分析代碼中的潛在錯誤、代碼規範性問題、複雜度問題等。在軟體開發過程中,代碼風格一致、通俗易懂、易於維護是非常重要的。而oclint可以通過對代碼進行靜態分析,自動生成各種規則來幫助開發人員檢測代碼中的錯誤和不規範的寫法,進而提高代碼的質量和可維護性。
使用oclint工具我們可以掌握代碼的複雜性,根據代碼結構和缺陷進行自動化分析,更好的保障代碼的質量和穩定性,減少人力測試成本,同時也提高調試效率,給開發和測試人員提供了極大的幫助。
下面我們根據使用實例具體介紹一下oclint的使用方法和好處。
二、oclint cmake
OCLint當前支持手寫Makefile和Cmake編譯,我們這裡介紹一下cmake的使用方法。首先確保您已經安裝完了cmake,同時將代碼託管到本地倉庫當中(這裡我們以Github為例)。
cmake -G Xcode -D OCLINT_BUILD_DIR=build \ -D CMAKE_C_COMPILER=clang \ -D CMAKE_CXX_COMPILER=clang++ \ -D OCLINT_BUILD_SYMBOLS=ON \ -D OCLINT_BUILD_DOCS=ON \ -D OCLINT_BUILD_TESTS=ON \ -D LLVM_ENABLE_ASSERTIONS=ON ../llvm/
這裡我們使用cmake工具生成了llvm的Xcode工程文件,並且指定了編譯器為clang。同時指定了編譯輸出目錄為build目錄。通過修改這個命令中的參數,您可以很方便地控制編譯輸出的結果。
三、oclint不更新了?
有人認為OCLint不再更新以及變得陳舊過時,但實際並非如此。其實它一直在更新,最近的一次更新是2021年8月份,版本號是0.15。相比於其他代碼掃描工具,OCLint的代碼庫更為開源,更新速度也更快。同時,OCLint也支持自定義規則,您可以根據自己的需求和經驗,添加或刪除規則。
所以說,OCLint雖然歷史悠久,但它仍然是一款很好用的代碼掃描工具,它可以大大提高我們代碼的精確性和可讀性。相比其他代碼掃描工具,OCLint具有更多的優勢,可以更好地配合Clang使用。
四、oclint自定義規則
OCLint默認有很多規則,但也不能滿足所有的需求,所以它支持自定義規則。我們可以使用oclint-json-compilation-database生成json文件,然後在json文件中進行自定義規則的添加和刪除。例如:
{ "clang": { "include_dirs": ["include"], "defines": ["__NP__", "FOO=BAR"], "cflags": ["-fobjc-arc", "-Wall"], "cxxflags": ["-stdlib=libc++", "-std=c++11"], "warnings_as_errors": true }, "rules": { "my_custom_rule": { "enabled": true, "priority": 3, "category": "portability", "message": "This is my custom rule.", "description": "This rule is a demonstration of how to define a custom rule for OCLint.", "regex": "[-+](nonnull|retained|released)" } } }
以上是一個典型的json文件,可以看到在rules定義中,有一個my_custom_rule,這是一個自定義規則。其中各個屬性的含義如下:
- enabled:表示該規則是否啟用
- priority:表示優先順序,用來控制規則的執行順序
- category:表示規則所屬的分類
- message:表示規則的錯誤信息
- description:表示規則的詳細描述
- regex:表示規則所匹配的正則表達式
隨著自定義規則的增加,OCLint的分析結果會變得更準確、更豐富。同時,如果您的團隊有自己的代碼規範和最佳實踐,您可以使用自定義規則將這些標準固化在代碼掃描工具中。
五、oclint如果需要真機才可以build
在使用OCLint時,有些開發者總會遇到一些很奇怪的問題,比如說,安裝了OCLint但是無法在Xcode中運行。這種情況下,我們需要在終端中執行以下命令:
cd /usr/local/bin sudo ln -s /usr/local/opt/llvm@3.7/bin/clang oclint sudo ln -s /usr/local/opt/llvm@3.7/bin/oclint oclint-json-compilation-database
以上命令將OCLint、oclint-json-compilation-database添加到了環境變數中,並且定義了一個軟鏈接。這樣我們就可以在終端中使用OCLint了。
六、oclint ci
現在,很多開發人員都在使用CI/CD來構建和測試代碼。CI/CD工具也可以很好地和OCLint配合使用。例如,我們可以在GitLab CI/CD的.yml文件中添加以下代碼:
image: alpine stages: - lint oclint: stage: lint before_script: - apk add --no-cache alpine-sdk cmake gcc g++ llvm-dev curl - curl -sSL https://github.com/oclint/oclint/releases/download/v0.13/oclint-0.13-x86_64-linux-llvm-3.9.1.tar.gz | tar -xz - export PATH=$PATH:/root/oclint-0.13/bin - which oclint || exit 1 script: - cd ${CI_PROJECT_DIR} - make clean all - oclint-json-compilation-database -- -c - oclint -list-enabled-rules -max-priority=3 -rc SHORT_VARIABLE_NAME=3 -rc LONG_LINE=280 -rc=LONG_VARIABLE_NAME=40 allow_failure: true artifacts: when: always paths: - oclint.xml
以上代碼實現了以下功能:
- Download OCLint
- Compile code with -c flag to generate compilation database
- Execute oclint command with pre-set configuration for filtering by priority, rules, variables, etc
這樣我們就可以在GitLab圖形化界面看到完整的oclint分析結果了。
結語
這裡我們詳細介紹了OCLean代碼掃描工具OCLint的好處、使用方法和自定義規則。掌握了這些技巧後,我們可以更好地利用靜態分析來提高代碼的質量和穩定性,同時最大限度地減少無效的測試。
原創文章,作者:ESSWV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/351788.html