【C言語】
静的解析 対 動的解析
gcc -fanalyzer VS gcc -fsanitize

静的解析動的解析

■gcc -fanalyzer(静的解析)

貴方の悪癖を指摘してくれる漢方薬のような効果がある。
コンパイル可能なソースコードがあれば良い。
gcc -Wall -Wetra で不摂生なプログラマのコードに大量の警告が出る。
職業プログラマは全ての警告を素直に直そう。

後から
ものすごい工数でコードの正当性を
お客に説明するならば
今すぐコードを直そう。

静的解析ツールの中には何を書いても
大量の警告が出るものがある。
あちらの警告を修正すると、
こちらの警告が出る。
要求仕様を実装してるのか、
静的解析ツール様をナダメテいるか解らなくなる。

そういう時は、主導権は我にあり。
所詮コンピュータのツールは貴方の下僕だ。
不要な警告は貴方の判断と責任で切り捨てるがよい。

■gcc -fsanitize(動的解析)

受け入れ試験前日のPM6:00に
セグメンテーションフォールトコアダンプが起きたなら
gcc -fsanitize で再コンパイルできないか検討してください。

貴方のコードの疾患を
今直ぐ治してくれる西洋薬のような効果が期待できるかも。

でも、、、まあ、、
動的解析で貴方のコードの体質が改善されるわけではないので、
日頃から
静的解析でコードを綺麗にしておいてね。


■動的解析で検出できる問題例

void    w(char  *p,int idx,char c)  {
    p[idx]=c;
}
char    r(char  *p,int idx) {
    return p[idx];
}
int main(void)
{
    char    buf[10] = {0};
    w(buf,10,r(buf,10));
}

配列の領域外(buf[10])をread/write して
プログラムが異常終了するかもしれない
このコードは
gcc -Wall -Wextra -fanalyzer(静的解析)では問題検出できませんが、
gcc -fsanitize=address(動的解析)で問題検出可能です。

静的解析⇒コンパイル時問題が分る
動的解析⇒走行時問題が分る(ただし問題個所を通過しないとダメ)