C/C++ 디버깅 구성
launch.json 파일은 Visual Studio Code의 디버거를 구성하는 데 사용됩니다.
Visual Studio Code는 프로젝트의 .vscode 폴더 아래에 필요한 정보의 거의 전부를 포함하는 launch.json 파일을 생성합니다. 디버깅을 시작하려면 디버그하려는 실행 파일의 경로를 program 필드에 입력해야 합니다. 이는 시작(launch) 및 연결(attach) (실행 중인 인스턴스에 연결할 계획이 있는 경우) 구성 모두에 지정해야 합니다.
생성된 파일에는 시작 디버깅을 구성하는 섹션과 연결 디버깅을 구성하는 두 번째 섹션이 포함되어 있습니다.
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의 통합 터미널을 지원하기 위해, 확장 기능은 콘솔 입출력이 통합 터미널에 표시되도록 디버거 인수에 콘솔 리디렉션 명령을 추가합니다. 이 옵션을 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이면 모든 라이브러리의 심볼이 로드되고, 그렇지 않으면 solib 심볼이 로드되지 않습니다. ExceptionList에 의해 수정됩니다. 기본값은 true입니다.
- exceptionList: 세미콜론
;으로 구분된 파일 이름 목록(와일드카드 허용). LoadAll의 동작을 수정합니다. LoadAll이 true이면 목록의 이름과 일치하는 라이브러리에 대한 심볼을 로드하지 않습니다. 그렇지 않으면 일치하는 라이브러리에 대해서만 심볼을 로드합니다. 예:"foo.so;bar.so"
덤프 파일 디버깅
C/C++ 확장은 Windows에서 덤프 파일 디버깅 및 Linux 및 OS X에서 코어 덤프 파일 디버깅을 지원합니다.
dumpPath
Windows 덤프 파일을 디버그하려면 launch 구성에서 디버깅을 시작할 덤프 파일의 경로로 설정하십시오.
coreDumpPath
지정된 프로그램의 코어 덤프 파일을 디버그할 전체 경로입니다. launch 구성에서 디버깅을 시작할 코어 덤프 파일의 경로로 설정하십시오. 참고: MinGw에서는 코어 덤프 디버깅을 지원하지 않습니다.
원격 디버깅 또는 로컬 디버거 서버로 디버깅
miDebuggerServerAddress
원격 디버깅(예: localhost:1234)을 위해 연결할 디버거 서버(예: gdbserver)의 네트워크 주소입니다.
debugServerPath
시작할 디버그 서버의 전체 경로입니다.
debugServerArgs
디버거 서버의 인수입니다.
serverStarted
디버그 서버 출력에서 찾을 server-started 패턴입니다. 정규 표현식이 지원됩니다.
filterStdout
true로 설정하면 stdout 스트림에서 server-started 패턴을 검색하고 stdout을 디버그 출력으로 기록합니다. 기본값은 true입니다.
filterStderr
true로 설정하면 stderr 스트림에서 server-started 패턴을 검색하고 stderr을 디버그 출력으로 기록합니다. 기본값은 false입니다.
serverLaunchTimeout
디버그 서버가 시작될 때까지 디버거가 대기하는 시간(밀리초)입니다. 기본값은 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
사용 중단 이 옵션은 더 이상 필요하지 않습니다. 대상 아키텍처가 자동으로 감지되기 때문입니다.
타입
사용되는 기본 디버거를 나타냅니다. 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'입니다.