(2023/9/25)
[連載15] 静的解析
SOLIDの便利機能をご紹介するシリーズも、15回目になりました。
まだまだご紹介したい機能があります。
今回は、静的解析についてご紹介します。
ソースコードを解析し、間違っている要素があるところを指摘してくれる機能です。
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にあるんです。
見ていきましょう!
SOLID-IDEの静的解析機能については、このURLに記載されています。
https://solid.kmckk.com/SOLID/doc/latest/user_guide/static_analyzer.html
今回も前回に引き続き、Cortex-A9搭載ボード×PARTNER Jet2の組み合わせを使用します。
動作させるプログラムとしては、サンプル「KZM-A9GT-demo-analyze」を使用します。
静的解析を行うために準備する事は、特にありません。
標準で使う事ができる機能ですので、ビルドができる状態であればOKです。
ソリューションエクスプローラから、該当のプロジェクトを選択し、右クリックでポップアップメニューを表示します。
[プロジェクトのみでコード分析を実行]を選択します。
ビルド&解析が実行され、終了時に以下のように解析結果が表示されました。
右端にあるReportをクリックしてみます。
問題個所の情報が表示されました。
青くなっている、「Warning: line 147. column 8」の場所をクリックするとソースコードの該当場所に移動します。
④の箇所で、pStrがNULLのまま引数になってしまうよ、という問題ですね。
その関数が引数としてNULLを許可するか、NULLのまま引数にならないようにするか、どちらかの対処が必要、という事を教えてくれました。
詳細は、以下に記載されています。
ちなみに、①②③④とありますが、これは指摘④が発生する場合の流れを示しています。
指摘箇所の④のすぐ右に左向き矢印“←”がありますが、ここをクリックすると③に飛び、さらに③の左向き矢印“←”を押すと②に飛ぶ、、、という風に、流れを追う事が出来ます。
ここでは、これらが一画面に表示されましたが、広範囲に散らばっている場合に矢印“←” or “→”で追えるので、ソースコードあちこち探し回る手間が省けますね。
次に、上記のswitch文の中に、Defaultの場合の動作を記載してみましょう。
再度、静的解析してみます。
無事、先ほどの一番上にあった指摘が、解消されました。
本機能、無償版であるRaspberry Pi4 SOLIDでも使用することができます。
以前に作成した、Raspberry Pi4用のプログラムに対し静的解析をしてみます。
この記事で書いたプログラムです。
https://note.com/yn_2022/n/n021c5357c05f#d2ed83c9-ef17-432a-a845-646b8dd6c59d
タスク間通信したり、タスクを別CPUに引っ越しさせたり、GPIO割り込みでボタン押下を検出したり、、、のプログラムです。
では。。。
解析っ!
なんかいろいろ出てきました。。。
エラーコードを、後で使うだろう、と定義しておいて、デバッグにのみ使用してそのまま。
という「後片付けできない人」であることが発覚しました。
いやまぁ、もともとWarningで出てたんで、、、でも後で使うかなぁと思って。。。(言い訳)
とはいえ、動作に影響を及ぼしそうな問題は、ここでは摘出されなかったという事なので、良かったです。
今回は、静的解析機能をご紹介しました。
特に準備する必要なく、標準でこの機能が手軽に使用できるだけでなく、さらに問題部分をソースコード上に注釈表記してくれるので、非常に見やすいです。
SOLID-IDEを使うなら、絶対使いたいですね。
「ちょっとした自分だけのお試しコード(動けばOK)」であればともかく。
人に見せるコードであったり、複数人で開発しているような場合、ソースコードをコミットする前に静的解析を行って、指摘をきちんとクリアしておく。
不確実動作の元は早めにつぶしておく。
そんな礼儀正しい人になりたいものです。
次回は関数トレース機能についてご紹介する予定です。