intellisenseの罠 | らいとういんぐ

らいとういんぐ

-Light Wings- Ж gameproject

横スクロールしゃぼん玉アクションゲーム 「しゃぼんふぁんたじあ」 制作中

管理のsyです。
$らいとういんぐ-もふ(sy)

VC++2010を使い始めました。
しかし突如、PC重くなる現象が発生。

intellisenseのアウトプット処理が止まらないのです(右下らへんい吐き出しマークが出るアレです)。
あらゆるアプリケーションが重くなり、作業にならないほどです。

最初は訳が分からずVC++を再起動などを繰り返しました。
intellisenseのアウトプット場所のフォルダを変更した後だったのでそこを見に行ったりもしました。
ipchが作られたり消されたりしてるのを確認しましたが、何の事か分からず。


待っても直らないのでタスクマネージャーを開いて怪しげなアプリが活動してないか調べる事にしました。
そこで、VCExpress.exe付近でvcpkgsrv.exeが起動したり閉じたりを繰り返してるのがたまたま目に付きました。


多分これが原因だろうと思い始めこのアプリケーションを調べる事に。
すると、これこそがintellisenseの作業しているアプリでした。

よく考えたら、VC++の再起動直後にvcpkgsrv.exeがクラッシュしたと表示されていました。
ともかくintellisenseをオフに。

vcpkgsrv.exeがクラッシュすると、intellisenseがスムーズに動く為にアウトプットされるファイルが入るフォルダipchが作られたり消えたりを繰り返すようです(起動、落ちるを繰り返すため)。

何 と 言 う HDD ク ラ ッ シ ャ ー 。

アンチウイルスで駆除対象になるレベルでしょう(笑)

そしてこのプログラムが落ちる要因は、インクルードファイルが多重になっていた場合にスタックオーバーフローしてるのだろうという見解の記事を発見。

プログラムと言うのは通常上から下に向かって流れるものであるから、全てを調べている間に同じインクルードファイルが出てきたら又入って永久ループする可能性があるという見解(実際はインクルードガードが行われている)。

intellisenseはループにハマるらしい。でも、エラーが出ない状態まで組んだらクラッシュバグは無くなる。実は組んでる途中で落ちてしまっていた。

ここからは勝手な見解ですが、

恐らく、膨大なファイルのソースのintellisenseを一から作成する場合ひとつでもインクルードファイル内で同じインクルードファイルが出てくると多めのスタックが必要になるのだろうと思ふ。
更にその中で、もし、書きかけの項目があり、即座にエラーを吐き出そうとする場合、同じインクルードファイルにたどり着くたびにエラーを出さないといけなくなるはず。
そしてスタックオーバーフローへ(?) そして伝説へ(違っ


僕が実際に解決した方法は
クラッシュを開始したらintellisenseオフって、コンパイルエラーが出なくなるまで組んでからオン。
これだけでした。

つまりintellisenseは書きかけの項目に弱いのではないかと。
もしかしたら、「自動更新の無効化」と「エラーレポートの無効化」を使うだけでも多少なりこういうバグを軽減できるかもしれません。