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