よくある質問
- IntelliSense を正しく動作させるにはどうすればよいですか?
- c_cpp_properties.json の includePath と browse.path の違いは何ですか?
- 標準ライブラリの型の下に赤い波線が表示されるのはなぜですか?
- Windows で新しい IntelliSense を MinGW で動作させるにはどうすればよいですか?
- 新しい IntelliSense を Windows Subsystem for Linux で動作させるにはどうすればよいですか?
- フォーマット時にファイルが破損するのはなぜですか?
- 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 で新しい IntelliSense を MinGW で動作させるにはどうすればよいですか?
Visual Studio Code で C++ と Mingw-w64 を使い始める を参照してください。
新しい IntelliSense を Windows Subsystem for Linux で動作させるにはどうすればよいですか?
Visual Studio Code で C++ と Windows Subsystem for Linux を使い始める を参照してください。
フォーマット時にファイルが破損するのはなぜですか?
シンボリック リンクを含むパスを介してワークスペース フォルダーを開くと、ファイルが破損する (および他の機能が失敗する) 可能性があります (問題 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 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++ 拡張機能のログ記録 を参照してください。