SOLID未分類 静的解析(連載15)

静的解析(連載15)

(2023/9/25)

[連載15] 静的解析

SOLIDの便利機能をご紹介するシリーズも、15回目になりました。
まだまだご紹介したい機能があります。

今回は、静的解析についてご紹介します。
ソースコードを解析し、間違っている要素があるところを指摘してくれる機能です。

 

1.静的解析とは

Clangコンパイラにはとても沢山機能がありますが、使うのが面倒です。
(のっけから言ってしまうと、身も蓋もありませんが。)

沢山ある機能のうち、使いたいけど面倒だからいいや、となりがちな機能の一つに、ソースコードの静的解析を行う機能(Static Analyzer)があります。
https://clang.llvm.org/docs/ClangStaticAnalyzer.html

以下が静的解析機能のオフィシャルページのようです。
https://clang-analyzer.llvm.org/

ここからリンクされる、インストール方法が記載されているサイトを見てみます。
https://clang-analyzer.llvm.org/installation.html

ホストPCがMACでないなら、Clangコンパイラをソースからビルドして、scan-buildやscan-viewを作成せよ、と書かれています。
ビルドエラーでハマる気しかしない。。。

それに、Windowsだと、さらに難易度アップしません?
使うまでの道のり、遠いですね。。。

ん!この流れは!
そうです、SOLID-IDEにあるんです。

見ていきましょう!

 

 

2.使ってみる

 

SOLID-IDEの静的解析機能については、このURLに記載されています。

https://solid.kmckk.com/SOLID/doc/latest/user_guide/static_analyzer.html

 

今回も前回に引き続き、Cortex-A9搭載ボード×PARTNER Jet2の組み合わせを使用します。
動作させるプログラムとしては、サンプル「KZM-A9GT-demo-analyze」を使用します。

 

2.1 静的解析の準備は不要

静的解析を行うために準備する事は、特にありません。

標準で使う事ができる機能ですので、ビルドができる状態であればOKです。

 

2.2 解析

ソリューションエクスプローラから、該当のプロジェクトを選択し、右クリックでポップアップメニューを表示します。

[プロジェクトのみでコード分析を実行]を選択します。

ビルド&解析が実行され、終了時に以下のように解析結果が表示されました。

右端にあるReportをクリックしてみます。

問題個所の情報が表示されました。

青くなっている、「Warning: line 147. column 8」の場所をクリックするとソースコードの該当場所に移動します。

④の箇所で、pStrがNULLのまま引数になってしまうよ、という問題ですね。
その関数が引数としてNULLを許可するか、NULLのまま引数にならないようにするか、どちらかの対処が必要、という事を教えてくれました。

詳細は、以下に記載されています。

https://solid.kmckk.com/SOLID/doc/latest/user_guide/static_analyzer.html#null-pointer-argument-in-call-to-string-length-function

ちなみに、①②③④とありますが、これは指摘④が発生する場合の流れを示しています。
指摘箇所の④のすぐ右に左向き矢印“←”がありますが、ここをクリックすると③に飛び、さらに③の左向き矢印“←”を押すと②に飛ぶ、、、という風に、流れを追う事が出来ます。

ここでは、これらが一画面に表示されましたが、広範囲に散らばっている場合に矢印“←” or “→”で追えるので、ソースコードあちこち探し回る手間が省けますね。

 

次に、上記のswitch文の中に、Defaultの場合の動作を記載してみましょう。

再度、静的解析してみます。

無事、先ほどの一番上にあった指摘が、解消されました。

 

2.3 別のプロジェクトでも試してみる

本機能、無償版であるRaspberry Pi4 SOLIDでも使用することができます。

以前に作成した、Raspberry Pi4用のプログラムに対し静的解析をしてみます。

この記事で書いたプログラムです。

https://note.com/yn_2022/n/n021c5357c05f#d2ed83c9-ef17-432a-a845-646b8dd6c59d

タスク間通信したり、タスクを別CPUに引っ越しさせたり、GPIO割り込みでボタン押下を検出したり、、、のプログラムです。

では。。。

解析っ!

なんかいろいろ出てきました。。。

エラーコードを、後で使うだろう、と定義しておいて、デバッグにのみ使用してそのまま。
という「後片付けできない人」であることが発覚しました。
いやまぁ、もともとWarningで出てたんで、、、でも後で使うかなぁと思って。。。(言い訳)

とはいえ、動作に影響を及ぼしそうな問題は、ここでは摘出されなかったという事なので、良かったです。

 

 

3.まとめ

今回は、静的解析機能をご紹介しました。

特に準備する必要なく、標準でこの機能が手軽に使用できるだけでなく、さらに問題部分をソースコード上に注釈表記してくれるので、非常に見やすいです。

SOLID-IDEを使うなら、絶対使いたいですね。

「ちょっとした自分だけのお試しコード(動けばOK)」であればともかく。
人に見せるコードであったり、複数人で開発しているような場合、ソースコードをコミットする前に静的解析を行って、指摘をきちんとクリアしておく。
不確実動作の元は早めにつぶしておく。
そんな礼儀正しい人になりたいものです。

 

次回は関数トレース機能についてご紹介する予定です。