に参加して、VS Code の AI 支援開発について学びましょう。

よくある質問

IntelliSense を正しく機能させるにはどうすればよいですか?

設定を行わなくても、拡張機能はワークスペースフォルダーを検索し、コンピューター上で見つかったコンパイラ(例えば、Windows の場合は cl.exe/MinGW、macOS/Linux の場合は gcc/clang)をエミュレートすることでヘッダーを特定しようとします。この自動設定が不十分な場合は、C/C++: 設定の編集 (UI) コマンドを実行して既定値を変更できます。このビューでは、エミュレートするコンパイラ、使用するインクルードファイルのパス、プリプロセッサ定義などを変更できます。

または、当社の拡張機能と連携するビルドシステム拡張機能をインストールしている場合は、その拡張機能に設定を提供させることができます。例えば、CMake Tools 拡張機能は CMake ビルドシステムを使用するプロジェクトを設定できます。C/C++: 設定プロバイダーの変更... コマンドを使用して、そのような拡張機能が IntelliSense の設定を提供するように有効にしてください。

ビルドシステム拡張機能のサポートがないプロジェクトの場合の3つ目のオプションは、ビルドシステムがこのファイルの生成をサポートしている場合に compile_commands.json ファイルを使用することです。設定 UI の「Advanced」セクションで、compile_commands.json へのパスを指定すると、拡張機能はそのファイルにリストされているコンパイル情報を使用して IntelliSense を構成します。

注: 拡張機能がソースコード内の #include ディレクティブを解決できない場合、ソースファイルの本文の linting 情報は表示されません。VS Code の問題ウィンドウを確認すると、拡張機能は、どのファイルが見つからなかったかについて詳細情報を提供します。それでも linting 情報を表示したい場合は、C_Cpp.errorSquiggles 設定の値を変更できます。

includePath と browse.path の違いは何ですか?

これらの2つの設定は c_cpp_properties.json で利用でき、混同しやすいことがあります。

includePath

このパス文字列の配列は、意味認識型 IntelliSense 機能を提供する「Default」IntelliSense エンジンによって使用されます。インクルードパスは、-I スイッチを介してコンパイラに送信するパスと同じです。ソースファイルが解析されるとき、IntelliSense エンジンは、これらのパスを #include ディレクティブで指定されたファイルに前置して、それらを解決しようとします。これらのパスは、/** で終わらない限り再帰的に検索されません。

browse.path

このパス文字列の配列は、グローバルシンボル情報を含むデータベースを生成する「Tag Parser」(「browse engine」)によって使用されます。このエンジンは、指定されたパスの下にあるすべてのファイルを再帰的に列挙し、プロジェクトフォルダーをタグ解析しながら潜在的なインクルードとして追跡します。パスの再帰的な列挙を無効にするには、パス文字列に /* を追加します。

ワークスペースを初めて開くと、拡張機能は ${workspaceFolder}/**includePath に追加し、browse.path は未定義のままになります(そのため、デフォルトで includePath になります)。これが望ましくない場合は、c_cpp_properties.json ファイルを開いて変更できます。

標準ライブラリの型に赤い波線が表示されるのはなぜですか?

これの最も一般的な理由は、インクルードパスと定義の欠落です。これを修正する最も簡単な方法は、c_cpp_properties.jsoncompilerPath をコンパイラのパスに設定することです。

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 データベースをリセットするコマンドがあります。コマンドパレット (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つのフォルダーに制限できます。

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++ 拡張機能のログ記録 を参照してください。

© . This site is unofficial and not affiliated with Microsoft.