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

C/C++ デバッグの構成

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

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

生成されたファイルには、起動用のデバッグを構成するセクションと、アタッチ用のデバッグを構成するセクションの 2 つが含まれています。

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

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

program (必須)

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

symbolSearchPath

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

requireExactSource

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

additionalSOLibSearchPath

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

externalConsole

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

  • Windows: true に設定すると、外部コンソールを起動します。false に設定すると、VS Code の integratedTerminal を使用します。
  • Linux: true に設定すると、VS Code に外部コンソールを起動するよう通知します。false に設定すると、VS Code の integratedTerminal を使用します。
  • macOS: true に設定すると、lldb-mi を介して外部コンソールを起動します。false に設定すると、出力は VS Code の debugConsole に表示されます。lldb-mi の制限により、integratedTerminal のサポートは利用できません。

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 の場合、すべてのライブラリのシンボルがロードされます。そうでない場合、ソリブシンボルはロードされません。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

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

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' です。