ページ ツリー

 コンテンツ

QAC 8.0 / QAC++ 3.0以降

 関数タイムアウト、クエリタイムアウト、メモリ不足によって中止されないように(『DFAが中止された場合の対処』を参照)、かつ、可能な限り高精度で QAC/QAC++ のデータフロー解析(DFA)を実施する設定方法の1つの案を以下に記載します。

■ 前提

最新版の QAC / QAC++ を『推奨スペック』を満たすマシンで使用します。
QAC / QAC++ のバージョンアップに伴い、DFA は常にリソースの使用効率向上や解析時間短縮のための改良を行っております。

■ 設定

・翻訳単位間データフロー解析

翻訳単位間データフロー解析(ITU)』をご覧いただき、ITUを実施する設定にします。
合わせて複数回解析するようにします。

・関数間解析

関数間解析』をご覧いただき、関数間解析の深さを最大に設定します。

・クエリタイムアウト

クエリタイムアウト』をご覧いただき、クエリタイムアウト(メッセージ2758)が発生しない範囲で、
最も小さいクエリタイムアウト値を設定します。

・関数タイムアウト

関数タイムアウト』をご覧いただき、関数タイムアウト値を設定します。
設定値は解析完了を待つことが可能な範囲で設定してください。

 ▼関数タイムアウト値の設定例

プロジェクト内に関数が100個存在し、解析完了を待つことが可能な時間が2日である場合、単純には関数タイムアウト値を 2/100 とします。

ただし、全ての関数が解析に時間がかかるわけではないため、実際には特に解析に時間がかかる関数だけを考慮します。

例えば、解析が60秒で完了しない関数を、"特に解析に時間がかかる関数"と判断するとします。
最初は関数タイムアウトを60秒として解析し、関数タイムアウト(メッセージ2755)の発生数をカウントします。
100個の関数のうち、20個の関数でタイムアウトが発生したとすると、残りの80個の関数の解析には特に時間はかからないと考えることができ、関数タイムアウトをおおよそ 2/20 とすることができます。

■ ソースコードの修正

最新版の QAC / QAC++ を使用し、推奨スペックを満たしても、コードの内容や設定によっては、関数タイムアウト、クエリタイムアウト、メモリ不足の発生が解消されない場合もあります。
DFAのタイムアウトやメモリ不足が発生しにくいコード』にすることをご検討ください。