🚀 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 デバッガーに、シンボル (.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 の integratedTerminal が使用されます。
  • Linux: true に設定すると、VS Code に外部コンソールを生成するように通知します。false に設定すると、VS Code の integratedTerminal が使用されます。
  • macOS: true に設定すると、lldb-mi を介して外部コンソールが生成されます。false に設定すると、出力は VS Code のデバッグコンソールに表示されます。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": "ターゲットを実行", "ignoreFailures": false }]

customLaunchSetupCommands

指定した場合、これはターゲットを起動するために使用されるデフォルトコマンドを他のコマンドに置き換えます。たとえば、ターゲットプロセスにアタッチするために "-target-attach" にすることができます。空のコマンドリストは、起動コマンドを何もないものに置き換えます。これは、デバッガーにコマンドラインオプションとして起動オプションが提供されている場合に役立ちます。例: "customLaunchSetupCommands": [ { "text": "target-run", "description": "ターゲットを実行", "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 ストリームで server-started パターンを検索し、stdout をデバッグ出力にログ記録します。デフォルト値は true です。

filterStderr

true に設定すると、stderr ストリームで server-started パターンを検索し、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' 設定によって含まれていない限り、デバッガーは ANY モジュールのシンボルをロードしようとしません。

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

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

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

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

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