VS Codeのエージェントモードを拡張するには、を試してください!

C/C++ のデバッグを構成する

launch.json ファイルは、Visual Studio Code でデバッガーを構成するために使用されます。

Visual Studio Code は、必要な情報のほぼすべてを含む launch.json (プロジェクトの .vscode フォルダー内) を生成します。デバッグを開始するには、デバッグする予定の実行可能ファイルへのパスを program フィールドに入力する必要があります。これは、launch (起動) と attach (アタッチ) の両方の構成で指定する必要があります (実行中のインスタンスにいつでもアタッチする予定がある場合)。

生成されたファイルには 2 つのセクションが含まれます。1 つは launch (起動) 用のデバッグを構成するセクションで、もう 1 つは attach (アタッチ) 用のデバッグを構成するセクションです。

VS Code のデバッグ動作を構成する

デバッグ中の VS Code の動作を制御するには、次のオプションを設定または変更します

program (必須)

デバッガーが起動またはアタッチする実行可能ファイルのフルパスを指定します。デバッガーはデバッグ シンボルを読み込むためにこの場所を必要とします。

symbolSearchPath

Visual Studio Windows デバッガーに、シンボル (.pdb) ファイルを検索するパスを指示します。複数のパスはセミコロンで区切ります。例: "C:\\Symbols;C:\\SymbolDir2"

requireExactSource

Visual Studio Windows デバッガーに、現在のソース コードが pdb と一致することを要求するよう指示するオプションのフラグです。

additionalSOLibSearchPath

GDB または LLDB に、.so ファイルを検索するパスを指示します。複数のパスはセミコロンで区切ります。例: "/Users/user/dir1;/Users/user/dir2"

externalConsole

デバッグ対象を起動する場合にのみ使用されます。attach の場合、このパラメーターはデバッグ対象の動作を変更しません。

  • Windows: true に設定すると、外部コンソールを生成します。false に設定すると、VS Code の統合ターミナルを使用します。
  • Linux: true に設定すると、外部コンソールを生成するよう VS Code に通知します。false に設定すると、VS Code の統合ターミナルを使用します。
  • macOS: true に設定すると、lldb-mi を介して外部コンソールを生成します。false に設定すると、出力は VS Code のデバッグ コンソールに表示されます。lldb-mi の制限により、統合ターミナルのサポートは利用できません。

avoidWindowsConsoleRedirection

Windows 上の gdb で VS Code の統合ターミナルをサポートするために、拡張機能はコンソールのリダイレクト コマンドをデバッグ対象の引数に追加し、コンソールの入出力を統合ターミナルに表示します。このオプションを true に設定すると、この機能が無効になります。

logging

どの種類のメッセージをデバッグ コンソールに記録するかを決定するオプションのフラグです。

  • exceptions: 例外メッセージをデバッグ コンソールに記録するかどうかを決定するオプションのフラグです。既定値は true です。
  • moduleLoad: モジュール ロード イベントをデバッグ コンソールに記録するかどうかを決定するオプションのフラグです。既定値は true です。
  • programOutput: プログラムの出力をデバッグ コンソールに記録するかどうかを決定するオプションのフラグです。既定値は true です。
  • engineLogging: 診断エンジン ログをデバッグ コンソールに記録するかどうかを決定するオプションのフラグです。既定値は false です。
  • trace: 診断アダプター コマンドのトレースをデバッグ コンソールに記録するかどうかを決定するオプションのフラグです。既定値は false です。
  • traceResponse: 診断アダプターのコマンドと応答のトレースをデバッグ コンソールに記録するかどうかを決定するオプションのフラグです。既定値は false です。

visualizerFile

デバッグ時に使用する .natvis ファイル。Natvis ファイルの作成方法については、「ネイティブ オブジェクトのカスタム ビューを作成する」を参照してください。

showDisplayString

visualizerFile が指定されている場合、showDisplayString は表示文字列を有効にします。このオプションを有効にすると、デバッグ中のパフォーマンスが低下する可能性があります。

{
  "name": "C++ Launch (Windows)",
  "type": "cppvsdbg",
  "request": "launch",
  "program": "C:\\app1\\Debug\\app1.exe",
  "symbolSearchPath": "C:\\Symbols;C:\\SymbolDir2",
  "externalConsole": true,
  "logging": {
    "moduleLoad": false,
    "trace": true
  },
  "visualizerFile": "${workspaceFolder}/my.natvis",
  "showDisplayString": true
}

ターゲット アプリケーションを構成する

次のオプションを使用すると、ターゲット アプリケーションが起動されるときの状態を変更できます

args

起動時にプログラムに渡すコマンドライン引数の JSON 配列。例: ["arg1", "arg2"]。文字をエスケープする場合は、二重にエスケープする必要があります。例えば、["{\\\"arg1\\\": true}"]{"arg1": true} をアプリケーションに送信します。

cwd

デバッガーによって起動されるアプリケーションの作業ディレクトリを設定します。

environment

プログラムの環境に追加する環境変数。例: [ { "name": "config", "value": "Debug" } ][ { "config": "Debug" } ] ではありません。

{
  "name": "C++ Launch",
  "type": "cppdbg",
  "request": "launch",
  "program": "${workspaceFolder}/a.out",
  "args": ["arg1", "arg2"],
  "environment": [{ "name": "config", "value": "Debug" }],
  "cwd": "${workspaceFolder}"
}

GDB または LLDB のカスタマイズ

次のオプションを設定することで、GDB または LLDB の動作を変更できます

MIMode

VS Code が接続するデバッガーを示します。gdb または lldb に設定する必要があります。これはオペレーティング システムごとに事前構成されており、必要に応じて変更できます。

miDebuggerPath

デバッガー (gdb など) へのパス。実行可能ファイルのみが指定された場合、オペレーティング システムの PATH 変数からデバッガー (Linux と Windows では GDB、OS X では LLDB) を検索します。

miDebuggerArgs

デバッガー (gdb など) に渡す追加の引数。

stopAtEntry

true に設定すると、デバッガーはターゲットのエントリポイントで停止します (アタッチ時には無視されます)。既定値は false です。

stopAtConnect

true に設定すると、デバッガーはターゲットに接続した後に停止します。false に設定すると、デバッガーは接続後に続行します。既定値は false です。

setupCommands

GDB または LLDB をセットアップするために実行するコマンドの JSON 配列。例: "setupCommands": [ { "text": "target-run", "description": "run target", "ignoreFailures": false }]

customLaunchSetupCommands

指定された場合、ターゲットを起動するために使用される既定のコマンドを他のコマンドに置き換えます。たとえば、ターゲット プロセスにアタッチするために "-target-attach" を使用できます。空のコマンド リストは起動コマンドを何もない状態に置き換えます。これは、デバッガーにコマンドライン オプションとして起動オプションが提供されている場合に便利です。例: "customLaunchSetupCommands": [ { "text": "target-run", "description": "run target", "ignoreFailures": false }]

launchCompleteCommand

デバッガーが完全にセットアップされた後、ターゲット プロセスを実行させるために実行するコマンド。許可される値は "exec-run"、"exec-continue"、"None" です。既定値は "exec-run" です。

{
  "name": "C++ Launch",
  "type": "cppdbg",
  "request": "launch",
  "program": "${workspaceFolder}/a.out",
  "stopAtEntry": false,
  "customLaunchSetupCommands": [
    { "text": "target-run", "description": "run target", "ignoreFailures": false }
  ],
  "launchCompleteCommand": "exec-run",
  "linux": {
    "MIMode": "gdb",
    "miDebuggerPath": "/usr/bin/gdb"
  },
  "osx": {
    "MIMode": "lldb"
  },
  "windows": {
    "MIMode": "gdb",
    "miDebuggerPath": "C:\\MinGw\\bin\\gdb.exe"
  }
}

symbolLoadInfo

  • loadAll: true の場合、すべてのライブラリのシンボルが読み込まれます。それ以外の場合、solib シンボルは読み込まれません。ExceptionList によって変更されます。既定値は true です。
  • exceptionList: セミコロン ; で区切られたファイル名のリスト (ワイルドカード可)。LoadAll の動作を変更します。LoadAll が true の場合、リスト内のいずれかの名前と一致するライブラリのシンボルは読み込みません。それ以外の場合は、一致するライブラリのシンボルのみを読み込みます。例: "foo.so;bar.so"

ダンプ ファイルのデバッグ

C/C++ 拡張機能は、Windows のダンプ ファイルと、Linux および OS X のコア ダンプ ファイルのデバッグを有効にします。

dumpPath

Windows ダンプ ファイルをデバッグする場合は、launch 構成でデバッグを開始するために、これをダンプ ファイルへのパスに設定します。

coreDumpPath

指定されたプログラムのデバッグ用コア ダンプ ファイルへのフルパス。launch 構成でデバッグを開始するには、これをコア ダンプ ファイルへのパスに設定します。注: MinGw ではコア ダンプのデバッグはサポートされていません。

リモート デバッグまたはローカル デバッガー サーバーでのデバッグ

miDebuggerServerAddress

リモート デバッグ用に接続するデバッガー サーバー (例: gdbserver) のネットワーク アドレス (例: localhost:1234)。

debugServerPath

起動するデバッグ サーバーへのフルパス。

debugServerArgs

デバッガー サーバーの引数。

serverStarted

デバッグ サーバーの出力で検索するサーバー起動パターン。正規表現がサポートされています。

filterStdout

true に設定すると、サーバー起動パターンを stdout ストリームで検索し、stdout をデバッグ出力に記録します。既定値は true です。

filterStderr

true に設定すると、サーバー起動パターンを stderr ストリームで検索し、stderr をデバッグ出力に記録します。既定値は false です。

serverLaunchTimeout

デバッガーが debugServer の起動を待機する時間 (ミリ秒単位)。既定値は 10000 です。

pipeTransport

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

hardwareBreakpoints

指定された場合、リモート ターゲットのハードウェア ブレークポイントの動作を明示的に制御します。require が true に設定されている場合、常にハードウェア ブレークポイントを使用します。既定値は false です。limit は、使用可能なハードウェア ブレークポイントの数に対するオプションの制限であり、require が true で limit が 0 より大きい場合にのみ適用されます。既定値は 0 です。例: "hardwareBreakpoints": { require: true, limit: 6 }

追加のプロパティ

processId

既定値は ${command:pickProcess} で、デバッガーがアタッチできる利用可能なプロセスの一覧が表示されます。この既定値をそのままにしておくことをお勧めしますが、デバッガーがアタッチする特定のプロセス ID をプロパティに明示的に設定することもできます。

request

構成セクションがプログラムを launch (起動) するためのものか、既に実行中のインスタンスに attach (アタッチ) するためのものかを示します。

targetArchitecture

非推奨 ターゲット アーキテクチャは自動的に検出されるため、このオプションは不要になりました。

type

使用されている基になるデバッガーを示します。Visual Studio Windows デバッガーを使用する場合は cppvsdbg、GDB または LLDB を使用する場合は cppdbg である必要があります。これは、launch.json ファイルが作成されるときに自動的に正しい値に設定されます。

sourceFileMap

これにより、ソースのコンパイル時のパスをローカルのソースの場所にマッピングできます。これはキー/値ペアのオブジェクトであり、最初に文字列が一致したパスを解決します。(例: "sourceFileMap": { "/mnt/c": "c:\\" } は、デバッガーから返された /mnt/c で始まるパスをマッピングし、c:\\ に変換します。オブジェクト内に複数のマッピングを持つことができますが、それらは指定された順序で処理されます。)

環境変数定義ファイル

環境変数定義ファイルは、environment_variable=value の形式でキーと値のペアを含む単純なテキスト ファイルで、# はコメントに使用されます。複数行の値はサポートされていません。

cppvsdbg デバッガー構成には envFile プロパティも含まれており、デバッグ目的で変数を簡単に設定できます。

project.env ファイル:

# project.env

# Example environment with key as 'MYENVRIONMENTPATH' and value as C:\\Users\\USERNAME\\Project
MYENVRIONMENTPATH=C:\\Users\\USERNAME\\Project

# Variables with spaces
SPACED_OUT_PATH="C:\\This Has Spaces\\Project"

シンボル オプション

symbolOptions 要素を使用すると、デバッガーがシンボルを検索する方法をカスタマイズできます。例:

    "symbolOptions": {
        "searchPaths": [
            "C:\\src\\MyOtherProject\\bin\\debug",
            "https://my-companies-symbols-server"
        ],
        "searchMicrosoftSymbolServer": true,
        "cachePath": "%TEMP%\\symcache",
        "moduleFilter": {
            "mode": "loadAllButExcluded",
            "excludedModules": [ "DoNotLookForThisOne*.dll" ]
        }
    }

プロパティ

searchPaths: .pdb ファイルを検索するためのシンボル サーバー URL (例: https://msdl.microsoft.com/download/symbols) またはディレクトリ (例: /build/symbols) の配列。これらのディレクトリは、既定の場所 (モジュールの隣と、pdb が最初にドロップされたパス) に加えて検索されます。

searchMicrosoftSymbolServer: true の場合、Microsoft シンボル サーバー (https://msdl.microsoft.com/download/symbols) がシンボル検索パスに追加されます。指定しない場合、このオプションの既定値は false です。

cachePath": シンボル サーバーからダウンロードしたシンボルをキャッシュするディレクトリ。指定しない場合、デバッガーは既定で %TEMP%\\SymbolCache.. になります。

moduleFilter.mode: この値は "loadAllButExcluded" または "loadOnlyIncluded" のいずれかです。"loadAllButExcluded" モードでは、モジュールが 'excludedModules' 配列に含まれていない限り、デバッガーはすべてのモジュールのシンボルを読み込みます。"loadOnlyIncluded" モードでは、モジュールが 'includedModules' 配列に含まれているか、'includeSymbolsNextToModules' 設定によって含まれていない限り、デバッガーはどのモジュールのシンボルも読み込もうとしません。

"loadAllButExcluded" モードのプロパティ

moduleFilter.excludedModules: デバッガーがシンボルを読み込むべきではないモジュールの配列。ワイルドカード (例: MyCompany.*.dll) がサポートされています。

"loadOnlyIncluded" モードのプロパティ

moduleFilter.includedModules: デバッガーがシンボルを読み込むべきモジュールの配列。ワイルドカード (例: MyCompany.*.dll) がサポートされています。

moduleFilter.includeSymbolsNextToModules: true の場合、'includedModules' 配列に含まれていないモジュールに対しても、デバッガーはモジュール自体と起動実行可能ファイルの隣をチェックしますが、シンボル検索リストのパスはチェックしません。このオプションの既定値は 'true' です。