디버거 확장 프로그램
Visual Studio Code의 디버깅 아키텍처를 통해 확장 작성자는 기존 디버거를 VS Code에 쉽게 통합할 수 있으며, 모든 디버거에 대해 공통 사용자 인터페이스를 갖게 됩니다.
VS Code는 하나의 내장 디버거 확장인 Node.js 디버거 확장을 제공하며, 이는 VS Code에서 지원하는 많은 디버거 기능의 훌륭한 예시입니다.

이 스크린샷은 다음 디버깅 기능을 보여줍니다.
- 디버그 구성 관리.
- 시작/중지 및 단계별 실행을 위한 디버그 작업.
- 소스, 함수, 조건부, 인라인 중단점 및 로그 지점.
- 스택 추적, 멀티 스레드 및 멀티 프로세스 지원 포함.
- 보기 및 호버에서 복잡한 데이터 구조 탐색.
- 호버 또는 소스 내에 표시되는 변수 값.
- 감시 표현식 관리.
- 자동 완성 기능을 갖춘 대화형 평가를 위한 디버그 콘솔.
이 문서는 VS Code에서 모든 디버거를 작동시킬 수 있는 디버거 확장을 만드는 데 도움이 될 것입니다.
VS Code의 디버깅 아키텍처
VS Code는 디버거 백엔드와 통신하기 위해 도입한 추상 프로토콜을 기반으로 하는 일반적인 (언어 무관) 디버거 UI를 구현합니다. 디버거는 일반적으로 이 프로토콜을 구현하지 않기 때문에 디버거를 프로토콜에 "맞추는" 중개자가 필요합니다. 이 중개자는 일반적으로 디버거와 통신하는 독립 실행형 프로세스입니다.

이 중개자를 디버그 어댑터 (또는 짧게 DA)라고 부르며, DA와 VS Code 간에 사용되는 추상 프로토콜은 디버그 어댑터 프로토콜 (짧게 DAP)입니다. 디버그 어댑터 프로토콜은 VS Code와 독립적이므로 자체 웹사이트를 가지고 있으며, 여기서 소개 및 개요, 상세한 사양, 그리고 알려진 구현 및 지원 도구 목록을 찾을 수 있습니다. DAP의 역사와 동기는 이 블로그 게시물에서 설명됩니다.
디버그 어댑터는 VS Code와 독립적이며 다른 개발 도구에서도 사용할 수 있으므로, 확장 및 기여 포인트에 기반한 VS Code의 확장성 아키텍처와 일치하지 않습니다.
이러한 이유로 VS Code는 특정 디버그 유형 (예: Node.js 디버거의 경우 node) 아래에 디버그 어댑터를 기여할 수 있는 debuggers 기여 포인트를 제공합니다. VS Code는 해당 유형의 디버그 세션을 시작할 때 등록된 DA를 실행합니다.
따라서 가장 최소한의 형태에서 디버거 확장은 단순히 디버그 어댑터 구현의 선언적 기여일 뿐이며, 확장은 추가 코드 없이 디버그 어댑터의 패키징 컨테이너 역할을 합니다.

더 현실적인 디버거 확장은 VS Code에 다음과 같은 선언적 항목을 많이 또는 전부 기여합니다.
- 디버거에서 지원하는 언어 목록. VS Code는 해당 언어에 대한 중단점 설정을 위한 UI를 활성화합니다.
- 디버거에서 도입한 디버그 구성 속성에 대한 JSON 스키마. VS Code는 이 스키마를 사용하여 launch.json 편집기에서 구성을 확인하고 IntelliSense를 제공합니다. JSON 스키마 생성자
$ref및definition은 지원되지 않음을 유의하십시오. - VS Code에서 생성된 초기 launch.json에 대한 기본 디버그 구성.
- 사용자가 launch.json 파일에 추가할 수 있는 디버그 구성 스니펫.
- 디버그 구성에서 사용할 수 있는 변수 선언.
contributes.breakpoints 및 contributes.debuggers 참조에서 더 많은 정보를 찾을 수 있습니다.
위에서 설명한 순전히 선언적인 기여 외에도, Debug Extension API는 다음과 같은 코드 기반 기능을 가능하게 합니다.
- VS Code에서 생성된 초기 launch.json에 대한 동적으로 생성된 기본 디버그 구성.
- 디버그 어댑터를 동적으로 결정.
- 디버그 어댑터에 전달되기 전에 디버그 구성을 확인하거나 수정합니다.
- 디버그 어댑터와 통신합니다.
- 디버그 콘솔로 메시지를 보냅니다.
이 문서의 나머지 부분에서는 디버거 확장을 개발하는 방법을 보여줍니다.
Mock Debug 확장
이 튜토리얼에서 처음부터 디버그 어댑터를 만드는 것은 다소 부담스럽기 때문에, 교육용 "디버그 어댑터 스타터 키트"로 만든 간단한 DA로 시작하겠습니다. 실제 디버거와 통신하지 않고 모방하기 때문에 Mock Debug라고 불립니다. Mock Debug는 디버거를 시뮬레이션하며 단계별 실행, 계속, 중단점, 예외, 변수 액세스를 지원하지만 실제 디버거와 연결되어 있지는 않습니다.
mock-debug의 개발 설정에 대해 자세히 알아보기 전에, 먼저 VS Code Marketplace에서 미리 빌드된 버전을 설치하고 사용해 봅시다.
- 확장 보기를 열고 "mock"을 입력하여 Mock Debug 확장을 검색합니다.
- "설치"를 클릭하고 확장을 "다시 로드"합니다.
Mock Debug를 사용하려면
- 새로운 빈 폴더
mock test를 만들고 VS Code에서 엽니다. readme.md파일을 만들고 몇 줄의 임의 텍스트를 입력합니다.- 실행 및 디버그 보기 (⇧⌘D (Windows, Linux Ctrl+Shift+D))로 전환하고 launch.json 파일 만들기 링크를 선택합니다.
- VS Code에서 기본 launch 구성을 만들기 위해 "디버거"를 선택하도록 합니다. "Mock Debug"를 선택합니다.
- 녹색 시작 버튼을 누르고 제안된 파일
readme.md를 확인하기 위해 Enter를 누릅니다.
디버그 세션이 시작되고 readme 파일을 "단계별로" 실행하고, 중단점을 설정하고 히트시키고, 예외를 발생시킬 수 있습니다 (exception이라는 단어가 줄에 나타나는 경우).

Mock Debug를 자체 개발의 시작점으로 사용하기 전에, 미리 빌드된 버전을 먼저 제거하는 것이 좋습니다.
- 확장 보기를 열고 Mock Debug 확장의 기어 아이콘을 클릭합니다.
- "제거" 작업을 실행하고 창을 "다시 로드"합니다.
Mock Debug의 개발 설정
이제 Mock Debug의 소스를 가져와 VS Code 내에서 개발을 시작해 봅시다.
git clone https://github.com/microsoft/vscode-mock-debug.git
cd vscode-mock-debug
yarn
vscode-mock-debug 프로젝트 폴더를 VS Code에서 엽니다.
패키지 내용물
package.json은 mock-debug 확장의 매니페스트입니다.- mock-debug 확장의 기여 사항을 나열합니다.
compile및watch스크립트는 TypeScript 소스를out폴더로 트랜스파일하고 후속 소스 수정 사항을 감시하는 데 사용됩니다.vscode-debugprotocol,vscode-debugadapter,vscode-debugadapter-testsupport종속성은 노드 기반 디버그 어댑터 개발을 단순화하는 NPM 모듈입니다.
src/mockRuntime.ts는 간단한 디버그 API를 가진 모의 런타임입니다.- 런타임을 디버그 어댑터 프로토콜에 맞추는 코드는
src/mockDebug.ts에 있습니다. 여기서 DAP의 다양한 요청에 대한 핸들러를 찾을 수 있습니다. - 디버거 확장 구현은 디버그 어댑터에 있기 때문에 확장 코드가 전혀 필요하지 않습니다 (즉, 확장 호스트 프로세스에서 실행되는 코드). 그러나 Mock Debug는 디버거 확장 코드에서 무엇을 할 수 있는지 보여주기 위해 작은
src/extension.ts를 가지고 있습니다.
이제 **확장** 시작 구성을 선택하고 F5를 눌러 Mock Debug 확장을 빌드하고 시작합니다. 처음에는 TypeScript 소스를 out 폴더로 완전히 트랜스파일합니다. 전체 빌드 후, 변경 사항을 트랜스파일하는 감시 작업이 시작됩니다.
소스를 트랜스파일한 후, Mock Debug 확장이 디버그 모드로 실행되는 "[Extension Development Host]" 레이블이 붙은 새 VS Code 창이 나타납니다. 해당 창에서 readme.md 파일이 있는 mock test 프로젝트를 열고 'F5'로 디버그 세션을 시작한 후 단계별로 실행합니다.

확장을 디버그 모드로 실행 중이므로 이제 src/extension.ts에서 중단점을 설정하고 히트시킬 수 있습니다. 하지만 위에서 언급했듯이 확장에서는 흥미로운 코드가 많이 실행되지 않습니다. 흥미로운 코드는 별도 프로세스인 디버그 어댑터에서 실행됩니다.
디버그 어댑터 자체를 디버그하기 위해, 이를 디버그 모드로 실행해야 합니다. 이는 서버 모드로 디버그 어댑터를 실행하고 VS Code를 연결하도록 구성함으로써 가장 쉽게 달성할 수 있습니다. VS Code vscode-mock-debug 프로젝트에서 드롭다운 메뉴에서 **서버** 시작 구성을 선택하고 녹색 시작 버튼을 누릅니다.
확장에 대한 활성 디버그 세션이 이미 있었기 때문에 VS Code 디버거 UI가 이제 다중 세션 모드로 진입하며, 이는 CALL STACK 보기에서 **Extension**과 **Server**라는 두 디버그 세션의 이름을 볼 수 있다는 것을 나타냅니다.

이제 확장과 DA 모두를 동시에 디버그할 수 있습니다. 여기에 도달하는 더 빠른 방법은 **Extension + Server** 시작 구성을 사용하는 것으로, 두 세션을 자동으로 시작합니다.
디버거 확장을 개발하는 것에 대한 더 간단한 대안적 접근 방식은 아래에서 찾을 수 있습니다.
src/mockDebug.ts 파일의 launchRequest(...) 메서드 시작 부분에 중단점을 설정하고, 마지막 단계로 mock test 시작 구성에 포트 4711에 대한 debugServer 속성을 추가하여 mock 디버거가 DA 서버에 연결하도록 구성합니다.
{
"version": "0.2.0",
"configurations": [
{
"type": "mock",
"request": "launch",
"name": "mock test",
"program": "${workspaceFolder}/readme.md",
"stopOnEntry": true,
"debugServer": 4711
}
]
}
이제 이 디버그 구성을 시작하면 VS Code는 mock debug 어댑터를 별도 프로세스로 시작하는 대신 실행 중인 서버의 로컬 포트 4711에 직접 연결하며, launchRequest의 중단점에 히트하게 됩니다.
이 설정을 통해 Mock Debug를 쉽게 편집, 트랜스파일 및 디버그할 수 있습니다.
이제 실제 작업이 시작됩니다. src/mockDebug.ts 및 src/mockRuntime.ts의 디버그 어댑터 모의 구현을 "실제" 디버거 또는 런타임과 통신하는 코드로 대체해야 합니다. 이를 위해서는 디버그 어댑터 프로토콜을 이해하고 구현해야 합니다. 이에 대한 자세한 내용은 여기에서 찾을 수 있습니다.
디버거 확장의 package.json 해부
디버거 어댑터의 디버거별 구현을 제공하는 것 외에도, 디버거 확장은 다양한 디버그 관련 기여 포인트에 기여하는 package.json이 필요합니다.
그렇다면 Mock Debug의 package.json을 자세히 살펴보겠습니다.
모든 VS Code 확장과 마찬가지로, package.json은 확장의 기본 속성인 name, publisher, version을 선언합니다. categories 필드를 사용하여 VS Code 확장 마켓플레이스에서 확장을 더 쉽게 찾을 수 있도록 합니다.
{
"name": "mock-debug",
"displayName": "Mock Debug",
"version": "0.24.0",
"publisher": "...",
"description": "Starter extension for developing debug adapters for VS Code.",
"author": {
"name": "...",
"email": "..."
},
"engines": {
"vscode": "^1.17.0",
"node": "^7.9.0"
},
"icon": "images/mock-debug-icon.png",
"categories": ["Debuggers"],
"contributes": {
"breakpoints": [{ "language": "markdown" }],
"debuggers": [
{
"type": "mock",
"label": "Mock Debug",
"program": "./out/mockDebug.js",
"runtime": "node",
"configurationAttributes": {
"launch": {
"required": ["program"],
"properties": {
"program": {
"type": "string",
"description": "Absolute path to a text file.",
"default": "${workspaceFolder}/${command:AskForProgramName}"
},
"stopOnEntry": {
"type": "boolean",
"description": "Automatically stop after launch.",
"default": true
}
}
}
},
"initialConfigurations": [
{
"type": "mock",
"request": "launch",
"name": "Ask for file name",
"program": "${workspaceFolder}/${command:AskForProgramName}",
"stopOnEntry": true
}
],
"configurationSnippets": [
{
"label": "Mock Debug: Launch",
"description": "A new configuration for launching a mock debug program",
"body": {
"type": "mock",
"request": "launch",
"name": "${2:Launch Program}",
"program": "^\"\\${workspaceFolder}/${1:Program}\""
}
}
],
"variables": {
"AskForProgramName": "extension.mock-debug.getProgramName"
}
}
]
},
"activationEvents": ["onDebug", "onCommand:extension.mock-debug.getProgramName"]
}
이제 디버그 확장에 대한 기여를 포함하는 contributes 섹션을 살펴보겠습니다.
먼저, breakpoints 기여 포인트를 사용하여 중단점 설정이 활성화될 언어를 나열합니다. 이것이 없으면 Markdown 파일에서 중단점을 설정할 수 없습니다.
다음은 debuggers 섹션입니다. 여기서 디버그 type mock 아래에 하나의 디버거가 소개됩니다. 사용자는 launch 구성에서 이 유형을 참조할 수 있습니다. 선택적 속성인 label은 UI에 표시될 때 디버그 유형에 보기 좋은 이름을 지정하는 데 사용할 수 있습니다.
디버그 확장이 디버그 어댑터를 사용하므로, 코드에 대한 상대 경로가 program 속성으로 제공됩니다. 확장을 자체 포함하기 위해 애플리케이션은 확장 폴더 내에 있어야 합니다. 관례적으로 이 애플리케이션을 out 또는 bin이라는 폴더에 보관하지만, 다른 이름을 사용해도 됩니다.
VS Code는 다양한 플랫폼에서 실행되므로, DA 프로그램도 다른 플랫폼을 지원하도록 해야 합니다. 이를 위해 다음과 같은 옵션이 있습니다.
-
프로그램이 플랫폼 독립적인 방식으로 구현된 경우, 즉 모든 지원 플랫폼에서 사용 가능한 런타임에서 실행되는 프로그램인 경우, runtime 속성을 통해 해당 런타임을 지정할 수 있습니다. 현재 VS Code는
node및mono런타임을 지원합니다. 위에서 설명한 Mock 디버그 어댑터가 이 접근 방식을 사용합니다. -
DA 구현에 다른 플랫폼에 대한 다른 실행 파일이 필요한 경우, program 속성은 다음과 같이 특정 플랫폼에 대해 한정될 수 있습니다.
"debuggers": [{ "type": "gdb", "windows": { "program": "./bin/gdbDebug.exe", }, "osx": { "program": "./bin/gdbDebug.sh", }, "linux": { "program": "./bin/gdbDebug.sh", } }] -
두 접근 방식의 조합도 가능합니다. 다음 예시는 Mono DA에서 가져온 것으로, macOS 및 Linux에서는 런타임이 필요하지만 Windows에서는 필요 없는 mono 애플리케이션으로 구현됩니다.
"debuggers": [{ "type": "mono", "program": "./bin/monoDebug.exe", "osx": { "runtime": "mono" }, "linux": { "runtime": "mono" } }]
configurationAttributes는 이 디버거에 대해 사용할 수 있는 launch.json 속성의 스키마를 선언합니다. 이 스키마는 launch.json 유효성 검사 및 launch 구성 편집 시 IntelliSense 및 호버 도움말 지원에 사용됩니다.
initialConfigurations는 이 디버거에 대한 기본 launch.json의 초기 내용을 정의합니다. 이 정보는 프로젝트에 launch.json이 없고 사용자가 디버그 세션을 시작하거나 실행 및 디버그 보기에서 launch.json 파일 만들기 링크를 선택할 때 사용됩니다. 이 경우 VS Code는 사용자에게 디버그 환경을 선택하게 하고 해당 launch.json을 생성합니다.

package.json에 launch.json의 초기 내용을 정적으로 정의하는 대신, DebugConfigurationProvider를 구현하여 초기 구성을 동적으로 계산할 수 있습니다 (자세한 내용은 아래의 DebugConfigurationProvider 사용하기 섹션 참조).
configurationSnippets는 launch.json을 편집할 때 IntelliSense에 표시되는 launch 구성 스니펫을 정의합니다. 관례적으로 스니펫의 label 속성을 디버그 환경 이름으로 접두사를 붙여서 많은 스니펫 제안 목록에 표시될 때 명확하게 식별할 수 있도록 합니다.
variables 기여는 "변수"를 "명령"에 바인딩합니다. 이러한 변수는 ${command:xyz} 구문을 사용하여 launch 구성에서 사용할 수 있으며, 디버그 세션이 시작될 때 바인딩된 명령의 반환 값으로 변수가 대체됩니다.
명령의 구현은 확장 내에 있으며, UI가 없는 간단한 표현에서 확장 API에서 사용 가능한 UI 기능을 기반으로 한 정교한 기능에 이르기까지 다양합니다. Mock Debug는 extension.mock-debug.getProgramName 명령에 AskForProgramName 변수를 바인딩합니다. src/extension.ts의 이 명령의 구현은 showInputBox를 사용하여 사용자에게 프로그램 이름을 입력하도록 합니다.
vscode.commands.registerCommand('extension.mock-debug.getProgramName', config => {
return vscode.window.showInputBox({
placeHolder: 'Please enter the name of a markdown file in the workspace folder',
value: 'readme.md'
});
});
이제 변수는 launch 구성의 모든 문자열 유형 값에서 ${command:AskForProgramName}으로 사용할 수 있습니다.
DebugConfigurationProvider 사용하기
package.json의 디버그 기여의 정적 특성이 충분하지 않은 경우, DebugConfigurationProvider를 사용하여 디버그 확장의 다음 측면을 동적으로 제어할 수 있습니다.
- 새롭게 생성된 launch.json에 대한 초기 디버그 구성은 동적으로 생성될 수 있습니다. 예를 들어 워크스페이스에서 사용 가능한 일부 컨텍스트 정보에 기반합니다.
- launch 구성은 새로운 디버그 세션을 시작하는 데 사용되기 전에 해결 (또는 수정)될 수 있습니다. 이를 통해 워크스페이스에서 사용 가능한 정보를 기반으로 기본값을 채울 수 있습니다. 두 가지 해결 메서드가 존재합니다:
resolveDebugConfiguration은 변수가 launch 구성에서 대체되기 전에 호출되고,resolveDebugConfigurationWithSubstitutedVariables는 모든 변수가 대체된 후에 호출됩니다. 전자는 유효성 검사 로직이 디버그 구성에 추가 변수를 삽입하는 경우 사용해야 합니다. 후자는 유효성 검사 로직이 모든 디버그 구성 속성의 최종 값에 액세스해야 하는 경우 사용해야 합니다.
src/extension.ts의 MockConfigurationProvider는 디버그 세션이 launch.json이 존재하지 않을 때 시작되지만 Markdown 파일이 활성 편집기에서 열려 있는 경우를 감지하기 위해 resolveDebugConfiguration을 구현합니다. 이는 사용자가 편집기에서 파일을 열고 launch.json을 생성하지 않고 디버그하기만 하려는 일반적인 시나리오입니다.
디버그 구성 공급자는 일반적으로 확장 프로그램의 activate 함수에서 vscode.debug.registerDebugConfigurationProvider를 통해 특정 디버그 유형에 대해 등록됩니다. DebugConfigurationProvider가 충분히 일찍 등록되도록 하려면, 디버그 기능이 사용되는 즉시 확장이 활성화되어야 합니다. 이는 package.json에서 onDebug 이벤트에 대한 확장 활성화를 구성하여 쉽게 달성할 수 있습니다.
"activationEvents": [
"onDebug",
// ...
],
이 모든 것을 포괄하는 onDebug는 디버그 기능이 사용되는 즉시 트리거됩니다. 이는 확장이 시작 비용이 저렴한 경우 (즉, 시작 시퀀스에서 많은 시간을 소비하지 않는 경우) 잘 작동합니다. 디버그 확장이 시작 비용이 많이 드는 경우 (예: 언어 서버 시작으로 인해), onDebug 활성화 이벤트는 조기에 트리거되고 특정 디버그 유형을 고려하지 않으므로 다른 디버그 확장에 부정적인 영향을 줄 수 있습니다.
비용이 많이 드는 디버그 확장의 경우 더 세분화된 활성화 이벤트를 사용하는 것이 좋습니다.
onDebugInitialConfigurations는DebugConfigurationProvider의provideDebugConfigurations메서드가 호출되기 바로 전에 발생합니다.onDebugResolve:type은 지정된 유형에 대한DebugConfigurationProvider의resolveDebugConfiguration또는resolveDebugConfigurationWithSubstitutedVariables메서드가 호출되기 바로 전에 발생합니다.
요약: 디버그 확장의 활성화 비용이 저렴하면 onDebug를 사용합니다. 비용이 많이 들면 DebugConfigurationProvider가 해당 메서드 provideDebugConfigurations 및/또는 resolveDebugConfiguration을 구현하는지에 따라 onDebugInitialConfigurations 및/또는 onDebugResolve를 사용합니다.
디버거 확장 게시
디버거 확장을 생성하면 마켓플레이스에 게시할 수 있습니다.
package.json의 속성을 업데이트하여 디버거 확장의 이름과 목적을 반영하십시오.- 확장 게시의 설명대로 마켓플레이스에 업로드하십시오.
디버거 확장 개발의 대안적 접근 방식
앞서 보았듯이, 디버거 확장을 개발하는 것은 일반적으로 두 개의 병렬 세션에서 확장과 디버그 어댑터 모두를 디버깅하는 것을 포함합니다. 위에서 설명한 대로 VS Code는 이를 잘 지원하지만, 확장과 디버그 어댑터가 하나의 디버그 세션에서 디버깅할 수 있는 단일 프로그램이라면 개발이 더 쉬울 수 있습니다.
이 접근 방식은 실제로 디버그 어댑터가 TypeScript/JavaScript로 구현되어 있는 한 쉽게 수행할 수 있습니다. 기본 아이디어는 디버그 어댑터를 확장 내에서 직접 실행하고 VS Code가 각 세션마다 새로운 외부 디버그 어댑터를 시작하는 대신 연결하도록 하는 것입니다.
이를 위해 VS Code는 디버그 어댑터를 생성하고 실행하는 방법을 제어하는 확장 API를 제공합니다. DebugAdapterDescriptorFactory에는 디버그 세션이 시작되고 디버그 어댑터가 필요할 때 VS Code에 의해 호출되는 createDebugAdapterDescriptor 메서드가 있습니다. 이 메서드는 디버그 어댑터가 실행되는 방식을 설명하는 설명자 객체(DebugAdapterDescriptor)를 반환해야 합니다.
현재 VS Code는 디버그 어댑터를 실행하는 세 가지 다른 방법을 지원하므로 세 가지 다른 설명자 유형을 제공합니다.
DebugAdapterExecutable: 이 객체는 경로와 선택적 인자 및 런타임을 가진 외부 실행 파일로 디버그 어댑터를 설명합니다. 실행 파일은 디버그 어댑터 프로토콜을 구현하고 stdin/stdout을 통해 통신해야 합니다. 이것은 VS Code의 기본 작동 모드이며,DebugAdapterDescriptorFactory가 명시적으로 등록되지 않은 경우 VS Code는 package.json의 해당 값을 사용하여 이 설명자를 자동으로 사용합니다.DebugAdapterServer: 이 객체는 특정 로컬 또는 원격 포트를 통해 통신하는 서버로 실행되는 디버그 어댑터를 설명합니다.vscode-debugadapternpm 모듈을 기반으로 하는 디버그 어댑터 구현은 이 서버 모드를 자동으로 지원합니다.DebugAdapterInlineImplementation: 이 객체는vscode.DebugAdapter인터페이스를 구현하는 JavaScript 또는 TypeScript 객체로 디버그 어댑터를 설명합니다.vscode-debugadapternpm 모듈의 버전 1.38-pre.4 이상을 기반으로 하는 디버그 어댑터 구현은 이 인터페이스를 자동으로 구현합니다.
Mock Debug는 세 가지 유형의 DebugAdapterDescriptorFactories 및 'mock' 디버그 유형에 대해 등록되는 방법의 예시를 보여줍니다. 사용할 실행 모드는 전역 변수 runMode를 가능한 값 external, server, 또는 inline 중 하나로 설정하여 선택할 수 있습니다.
개발을 위해 inline 및 server 모드는 확장과 디버그 어댑터를 단일 프로세스에서 디버깅할 수 있기 때문에 특히 유용합니다.