コンテンツ
QAC 8.0 / QAC++ 3.0以降
関数タイムアウト、クエリタイムアウト、メモリ不足によって中止されないように(『DFAが中止された場合の対処』を参照)、かつ、可能な限り高精度で QAC/QAC++ のデータフロー解析(DFA)を実施する設定方法の1つの案を以下に記載します。
■ 前提
『推奨スペック』を満たすマシンで解析を行います。
■ 設定
・翻訳単位間データフロー解析
『翻訳単位間データフロー解析(ITU)』をご覧いただき、ITUを実施する設定にします。
合わせて複数回解析するようにします。
・関数間解析
『関数間解析』をご覧いただき、関数間解析の深さを最大に設定します。
・クエリタイムアウト
『クエリタイムアウト』をご覧いただき、クエリタイムアウト(メッセージ2758)が発生しない範囲で、
最も小さいクエリタイムアウト値を設定します。
・関数タイムアウト
『関数タイムアウト』をご覧いただき、関数タイムアウト値を設定します。
設定値は解析完了を待つことが可能な範囲で設定してください。
▼関数タイムアウト値の設定例
プロジェクト内に関数が100個存在し、解析完了を待つことが可能な時間が2日である場合、単純には関数タイムアウト値を 2日/100 とします。
ただし、全ての関数が解析に時間がかかるわけではないため、実際には特に解析に時間がかかる関数だけを考慮します。
例えば、解析が60秒で完了しない関数を、"特に解析に時間がかかる関数"と判断するとします。
最初は関数タイムアウトを60秒として解析し、関数タイムアウト(メッセージ2755)の発生数をカウントします。
100個の関数のうち、20個の関数でタイムアウトが発生したとすると、残りの80個の関数の解析には特に時間はかからないと考えることができ、関数タイムアウトをおおよそ 2日/20 とすることができます。
■ ソースコードの修正
推奨スペックを満たしても、コードの内容と設定によっては、関数タイムアウト、クエリタイムアウト、メモリ不足の発生が解消されない場合もあります。
『DFAのタイムアウトやメモリ不足が発生しにくいコード』にすることをご検討ください。