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

Visual Studio Code で C++ をデバッグする

ターゲットコンパイラ/プラットフォームごとの構成チュートリアルで指定されているように、デバッグ環境の基本設定を完了した後、このセクションで C/C++ のデバッグに関する詳細を学ぶことができます。

Visual Studio Code は、使用しているオペレーティングシステムに応じて、C/C++ 用の以下のデバッガーをサポートしています。

  • Linux: GDB
  • macOS: LLDB または GDB
  • Windows: Visual Studio Windows デバッガー または GDB (Cygwin または MinGW を使用)

GDB を使用した Windows デバッグ

VS Code を使用して、Cygwin または MinGW で作成された Windows アプリケーションをデバッグできます。Cygwin または MinGW のデバッグ機能を使用するには、起動構成 (launch.json) でデバッガーのパスを手動で設定する必要があります。Cygwin または MinGW アプリケーションをデバッグするには、miDebuggerPath プロパティを追加し、その値を Cygwin または MinGW 環境に対応する gdb.exe の場所として設定します。

    "miDebuggerPath": "c:\\mingw\\bin\\gdb.exe"

Windows 上での Cygwin/MinGW デバッグは、アタッチと起動の両方のデバッグシナリオをサポートしています。

詳細については、「C/C++ デバッグの構成」を参照してください。

Windows で GDB を使用してデバッグしている場合は、「MinGW64 を使用した Windows デバッグ」を参照してください。

条件付きブレークポイント

条件付きブレークポイントを使用すると、条件の値が true の場合にのみ、特定のコード行で実行を中断できます。条件付きブレークポイントを設定するには、既存のブレークポイントを右クリックし、ブレークポイントの編集を選択します。これにより、小さなピークウィンドウが開き、デバッグ中にブレークポイントにヒットするために true と評価される必要がある条件を入力できます。

A conditional break

エディタでは、条件付きブレークポイントは、内部に黒い等号があるブレークポイント記号で示されます。カーソルを条件付きブレークポイントの上に置くと、その条件を表示できます。

関数ブレークポイント

関数ブレークポイントを使用すると、特定のコード行ではなく、関数の先頭で実行を中断できます。関数ブレークポイントを設定するには、実行ビューでブレークポイントセクション内を右クリックし、関数ブレークポイントの追加を選択して、実行を中断したい関数の名前を入力します。

Expression evaluation

VS Code は、いくつかのコンテキストで式評価をサポートしています。

  • 実行ビューのウォッチセクションに式を入力すると、ブレークポイントにヒットするたびに評価されます。
  • デバッグコンソールに式を入力すると、一度だけ評価されます。
  • ブレークポイントで停止している間、コードに表示される任意の式を評価できます。

ウォッチセクションの式は、デバッグ中のアプリケーションに影響を与えます。変数の値を変更する式は、プログラムの実行中、その変数を変更します。

マルチスレッドデバッグ

VS Code 用の C/C++ 拡張機能は、マルチスレッドプログラムをデバッグする機能を備えています。すべてのスレッドとその呼び出しスタックは呼び出しスタックセクションに表示されます。

Multi-threaded process

メモリダンプデバッグ

VS Code 用の C/C++ 拡張機能は、メモリダンプをデバッグする機能も備えています。メモリダンプをデバッグするには、launch.json ファイルを開き、C++ 起動構成に coreDumpPath (GDB または LLDB 用) または dumpPath (Visual Studio Windows デバッガー用) プロパティを追加し、その値をメモリダンプへのパスを含む文字列として設定します。これは、x64 マシンでデバッグされる x86 プログラムでも機能します。

追加シンボル

デバッガーがシンボルファイル (たとえば、Visual Studio Windows デバッガー用の .pdb ファイル) を見つけることができる追加ディレクトリがある場合、additionalSOLibSearchPath (GDB または LLDB 用) または symbolSearchPath (Visual Studio Windows デバッガー用) を追加することで指定できます。

    "additionalSOLibSearchPath": "/path/to/symbols;/another/path/to/symbols"

または

    "symbolSearchPath": "C:\\path\\to\\symbols;C:\\another\\path\\to\\symbols"

ソースファイルの場所

ソースファイルがコンパイル場所に見つからない場合、ソースファイルの場所を変更できます。これは、sourceFileMap セクションに追加された単純な置換ペアによって行われます。このリストの最初のマッチが使用されます。

"sourceFileMap": {
    "/build/gcc-4.8-fNUjSI/gcc-4.8-4.8.4/build/i686-linux-gnu/libstdc++-v3/include/i686-linux-gnu": "/usr/include/i686-linux-gnu/c++/4.8",
    "/build/gcc-4.8-fNUjSI/gcc-4.8-4.8.4/build/i686-linux-gnu/libstdc++-v3/include": "/usr/include/c++/4.8"
}

GDB、LLDB、および LLDB-MI コマンド (GDB/LLDB)

C++ (GDB/LLDB) デバッグ環境では、-exec コマンドを使用して GDB、LLDB、および LLDB-MI コマンドをデバッグコンソールから直接実行できますが、デバッグコンソールでコマンドを直接実行することはテストされておらず、場合によっては VS Code をクラッシュさせる可能性があるため注意してください。

その他のデバッグ機能

  • 無条件ブレークポイント
  • ウォッチウィンドウ
  • 呼び出しスタック
  • ステップ実行

VS Code でのデバッグの詳細については、「VS Code でのデバッグ」の紹介を参照してください。

C/C++ アプリをデバッグできるように launch.json ファイルを構成するその他の方法については、「C/C++ デバッグの構成」を参照してください。

Natvis フレームワーク

Natvis フレームワークを使用して、デバッガーで C++ オブジェクトのカスタムビューを作成できます。C/C++ 拡張機能で Natvis を使用する方法の詳細については、「ネイティブオブジェクトのカスタムビュー」のトピックを参照してください。

リモートデバッグ

Docker コンテナ内のプロセスをデバッグするなど、リモートプロセスへのアタッチに関する情報については、「パイプトランスポート」を参照してください。

デバッガーのデバッグ

問題レポートの情報に基づいて診断できない拡張機能のデバッグ問題が発生している場合は、ログを有効にしてログを送信するようお願いする場合があります。「デバッグアダプターのログを有効にする」を参照して、C/C++ 拡張機能のログを取得する方法を学んでください。

既知の制限事項

シンボルとコードナビゲーション

すべてのプラットフォーム

  • 拡張機能は関数本体を解析しないため、関数の本体内で定義されたシンボルに対しては定義のピーク定義へ移動は機能しません。

デバッグ

Windows

  • Cygwin および MinGW 上の GDB は、実行中のプロセスを中断できません。アプリケーションが実行中 (デバッガーの制御下にない) のときにブレークポイントを設定したり、デバッグ中のアプリケーションを一時停止したりするには、アプリケーションのターミナルで Ctrl-C を押します。
  • Cygwin 上の GDB は、コアダンプを開けません。

Linux

  • ptrace: Operation not permitted というエラーが表示される場合があります。これは、GDB がプロセスにアタッチするために昇格された権限を必要とすることによるものです。これは、以下の解決策を使用して解決できます。
    1. プロセスへのアタッチを使用する場合、デバッグセッションを開始する前にパスワードを入力する必要があります。

    2. このエラーを一時的に無効にするには、以下のコマンドを使用します。

      echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

    3. エラーを永続的に削除するには、/etc/sysctl.d/10-ptrace.conf というファイルを追加し、kernel.yama.ptrace_scope = 0 を追加します。

macOS

  • LLDB
    • LLDB でデバッグ中に、ブレークモードでターミナルウィンドウが閉じられた場合、デバッグは停止しません。デバッグは停止ボタンを押すことで停止できます。
    • デバッグが停止してもターミナルウィンドウは閉じられません。
  • GDB
    • macOS で GDB を使用するには、追加の手動インストール手順が必要です。README の「OS X 用 GDB の手動インストール」を参照してください。
    • GDB でプロセスにアタッチする場合、デバッグ中のアプリケーションを中断することはできません。GDB は、アプリケーションが実行されていないとき (アプリケーションにアタッチする前、またはアプリケーションが停止状態にあるとき) に設定されたブレークポイントのみをバインドします。これは、GDB のバグによるものです。
    • GDB は macOS で使用されるコアダンプ形式をサポートしていないため、GDB でデバッグしているときにコアダンプを読み込むことはできません。
    • GDB でプロセスにアタッチされている場合、break-all はプロセスを終了します。

次のステップ

さらに読む

その他の質問や問題がある場合は、GitHub で問題を提出してください。

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