よくある質問
- 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の構成を提供する拡張機能を有効にしてください。
ビルドシステム拡張機能のサポートがないプロジェクトの場合、ビルドシステムがcompile_commands.jsonファイルの生成をサポートしていれば、このファイルを使用するという3つ目のオプションがあります。構成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を始める」を参照してください。
フォーマットするとファイルが破損するのはなぜですか?
シンボリックリンクを含むパスを介してワークスペースフォルダが開かれた場合、ファイルが破損したり (問題 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が提供する場所があまり知られておらず、ユーザーが見つけられない、あるいはどこにあるか分からない場所に何ギガバイトものファイルを書き込みたくなかったためです。
この点を考慮し、すべての異なる開発環境のニーズを満たすことはできないと判断したため、それぞれの状況に最適な方法をカスタマイズできる設定を提供しました。
"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 Discussionsで議論を開始してください。修正が必要な問題を発見した場合は、GitHub Issuesで問題を報告してください。
イシューレポートの情報に基づいて診断できない拡張機能の問題が発生している場合は、デバッグログを有効にしてログを送信するようお願いする場合があります。C/C++拡張機能のログの取得方法については、「C/C++拡張機能のログ記録」を参照してください。