よくある質問
- IntelliSense を正しく動作させるにはどうすればよいですか?
- c_cpp_properties.json の includePath と browse.path の違いは何ですか?
- 標準ライブラリの型の下に赤い波線が表示されるのはなぜですか?
- Windows 上の MinGW で新しい IntelliSense を動作させるにはどうすればよいですか?
- Windows Subsystem for Linux で新しい IntelliSense を動作させるにはどうすればよいですか?
- フォーマット時にファイルが破損するのはなぜですか?
- IntelliSense データベースを再作成するにはどうすればよいですか?
- ipch フォルダーとは何ですか?
- IntelliSense キャッシュ (ipch) を無効にするにはどうすればよいですか?
- デバッグをセットアップするにはどうすればよいですか?
- デバッグシンボルを有効にするにはどうすればよいですか?
- デバッグが機能しないのはなぜですか?
- C/C++ 拡張機能の問題が疑われる場合はどうすればよいですか
IntelliSense を正しく動作させるにはどうすればよいですか?
構成なしで、拡張機能はワークスペースフォルダーを検索し、コンピューター上で見つけたコンパイラー (例: Windows の cl.exe/MinGW、macOS/Linux の gcc/clang) をエミュレートしてヘッダーを特定しようとします。この自動構成が不十分な場合は、[C/C++: 構成の編集 (UI)] コマンドを実行してデフォルトを変更できます。そのビューでは、エミュレートするコンパイラー、使用するインクルードファイルへのパス、プリプロセッサ定義などを変更できます。
または、拡張機能とインターフェースするビルドシステム拡張機能をインストールすると、その拡張機能が構成を提供できるようになります。たとえば、CMake Tools 拡張機能は、CMake ビルドシステムを使用するプロジェクトを構成できます。[C/C++: 構成プロバイダーの変更...] コマンドを使用して、そのような拡張機能を有効にして IntelliSense の構成を提供します。
ビルドシステム拡張機能をサポートしていないプロジェクトの 3 番目のオプションは、ビルドシステムがこのファイルを生成する場合、compile_commands.json ファイルを使用することです。構成 UI の [詳細設定] セクションで、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
このパス文字列の配列は、グローバルシンボル情報を含むデータベースを作成する "タグパーサー" ("参照エンジン") によって使用されます。このエンジンは、指定されたパスの下にあるすべてのファイルを再帰的に列挙し、プロジェクトフォルダーをタグ解析する際にそれらを潜在的なインクルードとして追跡します。パスの再帰的な列挙を無効にするには、パス文字列に /*
を追加できます。
ワークスペースを初めて開くと、拡張機能は ${workspaceFolder}/**
を includePath
に追加し、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 で新しい IntelliSense を動作させるにはどうすればよいですか?
Visual Studio Code で C++ と Windows Subsystem for Linux を使い始める を参照してください。
フォーマット時にファイルが破損するのはなぜですか?
ワークスペースフォルダーがシンボリックリンクを含むパスを介して開かれた場合、ファイルが破損する可能性があります (およびその他の機能が失敗する可能性があります) (issue vscode-cpptools#5061)。回避策は、シンボリックリンクがターゲットに解決されたパスを使用してワークスペースフォルダーを開くことです。
IntelliSense データベースを再作成するにはどうすればよいですか?
拡張機能のバージョン 0.12.3 以降では、IntelliSense データベースをリセットするコマンドがあります。コマンドパレットを開き (⇧⌘P (Windows、Linux Ctrl+Shift+P))、[C/C++: IntelliSense データベースのリセット] コマンドを選択します。
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 つのキャッシュロケーションが作成されます。キャッシュサイズ制限はキャッシュロケーションに適用されるため、ユーザーごとに 1 つのキャッシュロケーションを持つことで、キャッシュのディスク容量の使用量をデフォルト設定値を使用するすべての人に対してその 1 つのフォルダーに制限します。
VS Code ごとのワークスペースストレージフォルダーは、VS Code によって提供される場所がよく知られておらず、ユーザーがそれらを見たり、どこにあるかを知らない可能性がある場所に GB 単位のファイルを書き込みたくなかったため、使用されませんでした。
これを念頭に置いて、すべての異なる開発環境のニーズを満たすことはできないことを知っていたため、状況に最適な方法をカスタマイズできる設定を提供しました。
"C_Cpp.intelliSenseCachePath": <string>
この設定を使用すると、キャッシュパスのワークスペースまたはグローバルオーバーライドを設定できます。たとえば、すべてのワークスペースフォルダーで単一のキャッシュロケーションを共有する場合は、VS Code 設定を開き、[IntelliSense キャッシュパス] のユーザー設定を追加します。
"C_Cpp.intelliSenseCacheSize": <number>
この設定を使用すると、拡張機能が実行するキャッシュの量に制限を設定できます。これは概算ですが、拡張機能はキャッシュサイズを設定した制限にできるだけ近づけるように最善を尽くします。上記のようにワークスペース間でキャッシュロケーションを共有している場合でも、制限を増減できますが、[IntelliSense キャッシュサイズ] のユーザー設定を追加する必要があります。
IntelliSense キャッシュ (ipch) を無効にするにはどうすればよいですか?
IntelliSense キャッシュ機能を使用したくない場合 (キャッシュが有効になっている場合にのみ発生する可能性のあるバグを回避するなど)、[IntelliSense キャッシュサイズ] 設定を 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 ディスカッション でディスカッションを開始するか、修正する必要がある問題を見つけた場合は、GitHub issues で問題を報告してください。
問題レポートの情報に基づいて診断できない拡張機能の問題が発生している場合は、デバッグログを有効にしてログを送信するように求められる場合があります。C/C++ 拡張機能のログを取得する方法については、C/C++ 拡張機能のログ記録 を参照してください。