2013年3月9日土曜日

Visual Studio 2012 C/C++のインテリセンスがハングアップする原因と回避方法

以下のようなコードを書いているときに、それは起こった
コード::
私は個人プロジェクトではヘッダに関数・クラス定義を書いてしまうのだが、既にいくつかメンバ関数を定義してあるクラスに、新たにメンバ変数を追加しようとしたらインテリセンスが止まってしまった (myvarのところにセミコロンが無いのは書いている途中だったから。myfuncの中身が空なのは後で定義しようと思っていたから)

VSのステータスバーに「ソリューションのファイルを解析しています…」と表示され、インテリセンスの実体であるvcpkgsrv.exeが凄い勢いでメモリを食い始め、システムがスラッシング状態になってしまいVSをシャットダウンすることすらできなくなってしまった。

その後なんとか復旧し、色々試してみると、上のコードのような状況つまり、中身がセミコロンだけの関数のすぐ上(手前)に、セミコロンを付けずに変数を宣言しようとするとインテリセンスがおかしくなることがわかった。
これの回避方法は
  • 関数定義の後にセミコロンを付けるようにする
  • IDEオプションのインテリセンス自動更新の無効化をTrueにする
  • そもそも中身がセミコロンだけの関数を定義しない
の3つあった。

一番良いのは関数の中身をセミコロンだけにしないことだ。
関数定義の後にセミコロンを付けるのも悪くない。
2つめの自動更新の無効化は、明示的に呼び出さないと(デフォルトだとCtrl + Space)インテリセンスが働かなくなるので、呼び出す前に"int myvar;"と最後のセミコロンまでしっかり書き終えてしまえば良い。


追記
上記の状況以外でもハングアップしました。もう原因がよくわかりません。取り敢えず、ヘッダオンリをやめて、しばらく使ってみます。

0 件のコメント: