C/C++ デバッグを構成する
Visual Studio Code でデバッガーを構成するには、launch.json ファイルを使用します。
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 の debugConsole で出力を見ることができます。lldb-miの制限により、integratedTerminal のサポートは利用できません。
avoidWindowsConsoleRedirection
Windows で gdb と VS Code の Integrated Terminal をサポートするために、拡張機能はコンソール入出力を統合ターミナルに表示させるために、デバッギーの引数にコンソールリダイレクトコマンドを追加します。このオプションを true に設定すると、それが無効になります。
logging
Debug Console にログに記録するメッセージの種類を決定するオプションのフラグ。
- exceptions: 例外メッセージを Debug Console にログに記録するかどうかを決定するオプションのフラグ。デフォルトは true です。
- moduleLoad: モジュールロードイベントを Debug Console にログに記録するかどうかを決定するオプションのフラグ。デフォルトは true です。
- programOutput: プログラム出力を Debug Console にログに記録するかどうかを決定するオプションのフラグ。デフォルトは true です。
- engineLogging: 診断エンジンログを Debug Console にログに記録するかどうかを決定するオプションのフラグ。デフォルトは false です。
- trace: 診断アダプターコマンドトレースを Debug Console にログに記録するかどうかを決定するオプションのフラグ。デフォルトは false です。
- traceResponse: 診断アダプターコマンドと応答トレースを Debug Console にログに記録するかどうかを決定するオプションのフラグ。デフォルトは 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' です。