よくある質問
- IntelliSenseを正しく動作させるにはどうすればよいですか?
- c_cpp_properties.jsonにおけるincludePathとbrowse.pathの違いは何ですか?
- 標準ライブラリの型の下に赤い波線が表示されるのはなぜですか?
- Windows上のMinGWで新しいIntelliSenseを動作させるにはどうすればよいですか?
- Windows Subsystem for Linux (WSL) で新しいIntelliSenseを動作させるにはどうすればよいですか?
- フォーマット時にファイルが破損するのはなぜですか?
- IntelliSenseデータベースを再作成するにはどうすればよいですか?
- ipchフォルダーとは何ですか?
- IntelliSenseキャッシュ(ipch)を無効にするにはどうすればよいですか?
- デバッグのセットアップ方法を教えてください。
- デバッグシンボルを有効にするにはどうすればよいですか?
- デバッグが機能しないのはなぜですか?
- C/C++拡張機能に問題があると思われる場合、どうすればよいですか?
IntelliSenseを正しく動作させるにはどうすればよいですか?
構成なしの状態では、拡張機能はワークスペースフォルダーを検索し、コンピューター上で見つかったコンパイラ(Windowsの場合はcl.exe/MinGW、macOS/Linuxの場合はgcc/clangなど)をエミュレートすることでヘッダーを特定しようとします。この自動構成が不十分な場合は、C/C++: Edit Configurations (UI) コマンドを実行してデフォルトを変更できます。そのビューでは、エミュレートするコンパイラ、使用したいインクルードファイルのパス、プリプロセッサの定義などを変更できます。
また、拡張機能と連携するビルドシステム拡張機能をインストールすれば、その拡張機能に構成を提供させることもできます。例えば、CMake Tools拡張機能は、CMakeビルドシステムを使用するプロジェクトを構成できます。C/C++: Change Configuration Provider... コマンドを使用して、そのような拡張機能がIntelliSense用の構成を提供できるようにしてください。
ビルドシステム拡張機能がサポートされていないプロジェクト向けの3つ目の選択肢として、ビルドシステムが生成をサポートしている場合は compile_commands.json ファイルを使用できます。構成UIの「Advanced」セクションで compile_commands.json へのパスを指定すると、拡張機能はそのファイルに記載されたコンパイル情報を使用してIntelliSenseを構成します。
注: 拡張機能がソースコード内の #include 指示子を解決できない場合、ソースファイルの本文に対するリンティング情報は表示されません。VS Codeの [問題] パネルを確認すると、拡張機能が特定できなかったファイルに関する詳細情報が表示されます。それでもリンティング情報を表示したい場合は、C_Cpp.errorSquiggles 設定の値を変更してください。
includePathとbrowse.pathの違いは何ですか?
これら2つの設定は c_cpp_properties.json で使用でき、混同しやすいものです。
includePath
このパス文字列の配列は、セマンティック(意味論)を認識するIntelliSense機能を提供する「デフォルト」のIntelliSenseエンジンによって使用されます。このインクルードパスは、-I スイッチを介してコンパイラに送信するものと同じパスです。ソースファイルが解析される際、IntelliSenseエンジンは#includeディレクティブで指定されたファイルを解決しようとする際、これらのパスを先頭に付加します。これらのパスは、/** で終わらない限り、再帰的には検索されません。
browse.path
このパス文字列の配列は、グローバルなシンボル情報をデータベースに格納する「タグパーサー(ブラウズエンジン)」によって使用されます。このエンジンは、指定されたパス下のすべてのファイルを再帰的に列挙し、プロジェクトフォルダーのタグ解析中にインクルード候補として追跡します。あるパスの再帰的な列挙を無効にするには、パス文字列に /* を追加してください。
ワークスペースを初めて開くと、拡張機能は includePath に ${workspaceFolder}/** を追加し、browse.path は未定義のままになります(その結果、includePath がデフォルト値として使用されます)。これが望ましくない場合は、c_cpp_properties.json ファイルを開いて変更できます。
標準ライブラリの型の下に赤い波線が表示されるのはなぜですか?
これが発生する最も一般的な理由は、インクルードパスと定義の不足です。これを修正する最も簡単な方法は、c_cpp_properties.json の compilerPath をコンパイラのパスに設定することです。
Windows上のMinGWで新しいIntelliSenseを動作させるにはどうすればよいですか?
Visual Studio CodeでC++とMingw-w64を使い始める を参照してください。
Windows Subsystem for Linux (WSL) で新しいIntelliSenseを動作させるにはどうすればよいですか?
Visual Studio CodeでC++とWindows Subsystem for Linuxを使い始める を参照してください。
フォーマット時にファイルが破損するのはなぜですか?
シンボリックリンクを含むパスを介してワークスペースフォルダーを開くと、ファイルが破損する(および他の機能が失敗する)可能性があります(イシュー vscode-cpptools#5061)。回避策は、シンボリックリンクがターゲット先に解決された状態のパスを使用してワークスペースフォルダーを開くことです。
IntelliSenseデータベースを再作成するにはどうすればよいですか?
拡張機能のバージョン0.12.3以降、IntelliSenseデータベースをリセットするコマンドが用意されています。コマンドパレットを開き(⇧⌘P(Windows、Linuxは Ctrl+Shift+P))、C/C++: Reset IntelliSense Database コマンドを選択してください。
ipchフォルダーとは何ですか?
言語サーバーは、IntelliSenseのパフォーマンスを向上させるために、インクルードされたヘッダーファイルに関する情報をキャッシュします。ワークスペースフォルダー内のC/C++ファイルを編集すると、言語サーバーは ipch フォルダーにキャッシュファイルを保存します。デフォルトでは、ipch フォルダーはユーザーディレクトリ下に保存されます。具体的には、Windowsでは %LocalAppData%/Microsoft/vscode-cpptools、Linuxでは $XDG_CACHE_HOME/vscode-cpptools/(XDG_CACHE_HOME が定義されていない場合は $HOME/.cache/vscode-cpptools/)、macOSでは $HOME/Library/Caches/vscode-cpptools/ です。ユーザーディレクトリをデフォルトパスとして使用することで、拡張機能のユーザーごとにキャッシュの場所が作成されます。キャッシュサイズ制限はキャッシュの場所ごとに適用されるため、ユーザーごとに1つの場所を持つことで、キャッシュによるディスク容量の消費をそのフォルダー内に制限できます。
VS Codeのワークスペースごとのストレージフォルダーが使用されなかったのは、VS Codeが提供する場所があまり知られていないことと、ユーザーが場所を把握できない可能性のある場所に数GBのファイルを書き込みたくなかったためです。
これらを踏まえ、すべての異なる開発環境のニーズを満たすことはできないと判断し、状況に応じて最適な方法をカスタマイズできる設定を提供しました。
"C_Cpp.intelliSenseCachePath": <string>
この設定により、キャッシュパスのワークスペースまたはグローバルな上書きが可能になります。例えば、すべてのワークスペースフォルダーで単一のキャッシュ場所を共有したい場合は、VS Codeの設定を開き、IntelliSense Cache Path のユーザー設定を追加します。
"C_Cpp.intelliSenseCacheSize": <number>
この設定により、拡張機能が行うキャッシュ量に制限を設けることができます。これは近似値ですが、拡張機能はキャッシュサイズを設定した制限に可能な限り近づけるよう最大限努力します。前述のようにキャッシュの場所をワークスペース間で共有している場合でも制限の増減は可能ですが、IntelliSense Cache Size のユーザー設定を必ず追加するようにしてください。
IntelliSenseキャッシュ(ipch)を無効にするにはどうすればよいですか?
IntelliSenseのキャッシュ機能を使用したくない場合(キャッシュが有効なときのみ発生するバグの回避など)、IntelliSense Cache Size 設定を 0 に設定することで(JSON設定エディターでは "C_Cpp.intelliSenseCacheSize": 0)、機能を無効化できます。キャッシュを無効にすることは、特にヘッダーを編集する際に過度なディスク書き込みが発生している場合にも有効です。
デバッグのセットアップ方法を教えてください。
デバッガーが使用する実行ファイルとデバッガーを認識するように、デバッガーを構成する必要があります。
メインメニューから [実行] > [構成の追加...] を選択します。
launch.json ファイルが新しい構成で編集用に開かれます。program 設定を指定する以外は、デフォルト設定でおそらく動作します。
デバッガーの構成に関する詳細なドキュメントについては、C/C++デバッグの構成 を参照してください。
デバッグシンボルを有効にするにはどうすればよいですか?
デバッグシンボルの有効化は、使用しているコンパイラのタイプに依存します。以下は、一部のコンパイラとデバッグシンボルを有効にするために必要なコンパイラオプションです。
不明な場合は、出力にデバッグシンボルを含めるために必要なオプションについて、コンパイラのドキュメントを確認してください。通常、-g や --debug のようなバリエーションが使用されます。
Clang (C++)
- コンパイラを手動で呼び出す場合は、
--debugオプションを追加します。 - スクリプトを使用している場合は、
CXXFLAGS環境変数が設定されていることを確認してください。例:export CXXFLAGS="${CXXFLAGS} --debug" - CMakeを使用している場合は、
CMAKE_CXX_FLAGSが設定されていることを確認してください。例:export CMAKE_CXX_FLAGS=${CXXFLAGS}
Clang (C)
Clang C++と同様ですが、CXXFLAGS の代わりに CFLAGS を使用してください。
gcc または g++
コンパイラを手動で呼び出す場合は、-g オプションを追加します。
cl.exe
シンボルは *.pdb ファイル内に配置されます。
デバッグが機能しないのはなぜですか?
ブレークポイントで止まらない
デバッグを開始したときにブレークポイントがバインドされない(赤い円が塗りつぶされない)場合や、停止しない場合は、コンパイル中に デバッグシンボル を有効にする必要があるかもしれません。
デバッグは始まるが、スタックトレースのすべての行が灰色になっている
デバッガーが灰色のスタックトレースを表示している、ブレークポイントで停止しない、あるいはコールスタック内のシンボルが灰色である場合、実行ファイルが デバッグシンボル なしでコンパイルされています。
C/C++拡張機能に問題があると思われる場合、どうすればよいですか?
その他のご質問がある場合は、GitHub discussions でディスカッションを開始してください。また、修正が必要な問題を発見した場合は、GitHub issues に報告してください。
イシューレポートの情報だけでは診断できない拡張機能の問題が発生している場合、デバッグログを有効にしてログを送信するようお願いすることがあります。C/C++拡張機能のログを取得する方法については、C/C++拡張機能のログ記録 を参照してください。