Visual Studio Code에서 C++ 디버깅
각 대상 컴파일러/플랫폼에 대한 구성 튜토리얼에 지정된 대로 디버깅 환경의 기본 설정을 마친 후에는 이 섹션에서 C/C++ 디버깅에 대한 자세한 내용을 알아볼 수 있습니다.
Visual Studio Code는 사용 중인 운영 체제에 따라 C/C++에 대해 다음 디버거를 지원합니다.
- Linux: GDB
- macOS: LLDB 또는 GDB
- Windows: Visual Studio Windows 디버거 또는 GDB (Cygwin 또는 MinGW 사용)
GDB를 사용한 Windows 디버깅
VS Code를 사용하여 Cygwin 또는 MinGW로 생성된 Windows 애플리케이션을 디버깅할 수 있습니다. Cygwin 또는 MinGW 디버깅 기능을 사용하려면 디버거 경로를 시작 구성(launch.json)에서 수동으로 설정해야 합니다. Cygwin 또는 MinGW 애플리케이션을 디버깅하려면 miDebuggerPath 속성을 추가하고 해당 Cygwin 또는 MinGW 환경에 대한 gdb.exe의 위치로 값을 설정합니다.
예를 들어,
"miDebuggerPath": "c:\\mingw\\bin\\gdb.exe"
Windows의 Cygwin/MinGW 디버깅은 연결 및 시작 디버깅 시나리오를 모두 지원합니다.
자세한 내용은 C/C++ 디버깅 구성을 참조하십시오.
Windows에서 GDB로 디버깅하는 경우 MinGW64를 사용한 Windows 디버깅을 참조하십시오.
조건부 중단점
조건부 중단점을 사용하면 조건의 값이 true일 때만 특정 코드 줄에서 실행을 중단할 수 있습니다. 조건부 중단점을 설정하려면 기존 중단점에서 마우스 오른쪽 버튼을 클릭하고 **중단점 편집**을 선택합니다. 그러면 작은 미리보기 창이 열리며, 디버깅 중에 중단점이 히트되려면 true로 평가되어야 하는 조건을 입력할 수 있습니다.

편집기에서 조건부 중단점은 내부에 검은색 등호 기호가 있는 중단점 기호로 표시됩니다. 조건부 중단점에 커서를 놓으면 해당 조건을 표시할 수 있습니다.
함수 중단점
함수 중단점을 사용하면 특정 코드 줄이 아닌 함수의 시작 부분에서 실행을 중단할 수 있습니다. 함수 중단점을 설정하려면 **실행** 보기에서 **중단점** 섹션 안쪽을 마우스 오른쪽 버튼으로 클릭한 다음 **함수 중단점 추가**를 선택하고 실행을 중단하려는 함수 이름을 입력합니다.
식 평가
Visual Studio Code는 여러 컨텍스트에서 식 평가를 지원합니다.
- 중단점이 히트될 때마다 **실행** 보기의 **주시** 섹션에 식을 입력하면 해당 식이 평가됩니다.
- 디버그 콘솔에 식을 입력하면 한 번만 평가됩니다.
- 중단점에서 중지된 동안 코드에 나타나는 모든 식을 평가할 수 있습니다.
**주시** 섹션의 식은 디버깅 중인 애플리케이션에 적용됩니다. 변수 값을 수정하는 식은 프로그램 실행 시간 동안 해당 변수를 수정합니다.
다중 스레드 디버깅
Visual Studio Code의 C/C++ 확장은 다중 스레드 프로그램을 디버깅할 수 있는 기능을 갖추고 있습니다. 모든 스레드와 해당 호출 스택은 **호출 스택** 섹션에 표시됩니다.

메모리 덤프 디버깅
Visual Studio Code의 C/C++ 확장에는 메모리 덤프를 디버깅하는 기능도 있습니다. 메모리 덤프를 디버깅하려면 launch.json 파일을 열고 **C++ 시작** 구성에 coreDumpPath(GDB 또는 LLDB의 경우) 또는 dumpPath(Visual Studio Windows 디버거의 경우) 속성을 추가하고, 값을 메모리 덤프 경로가 포함된 문자열로 설정합니다. 이는 x64 컴퓨터에서 디버깅 중인 x86 프로그램에도 적용됩니다.
추가 심볼
디버거가 심볼 파일(예: Visual Studio Windows 디버거의 .pdb 파일)을 찾을 수 있는 추가 디렉터리가 있는 경우, additionalSOLibSearchPath(GDB 또는 LLDB의 경우) 또는 symbolSearchPath(Visual Studio Windows 디버거의 경우)를 추가하여 지정할 수 있습니다.
예를 들어,
"additionalSOLibSearchPath": "/path/to/symbols;/another/path/to/symbols"
또는
"symbolSearchPath": "C:\\path\\to\\symbols;C:\\another\\path\\to\\symbols"
소스 파일 찾기
소스 파일이 컴파일 위치에 없는 경우 소스 파일 위치를 변경할 수 있습니다. 이는 sourceFileMap 섹션에 추가된 간단한 대체 쌍으로 수행됩니다. 이 목록에서 첫 번째 일치 항목이 사용됩니다.
예를 들어,
"sourceFileMap": {
"/build/gcc-4.8-fNUjSI/gcc-4.8-4.8.4/build/i686-linux-gnu/libstdc++-v3/include/i686-linux-gnu": "/usr/include/i686-linux-gnu/c++/4.8",
"/build/gcc-4.8-fNUjSI/gcc-4.8-4.8.4/build/i686-linux-gnu/libstdc++-v3/include": "/usr/include/c++/4.8"
}
GDB, LLDB 및 LLDB-MI 명령어 (GDB/LLDB)
C++ (GDB/LLDB) 디버깅 환경의 경우, -exec 명령어를 사용하여 디버그 콘솔을 통해 GDB, LLDB 및 LLDB-MI 명령어를 직접 실행할 수 있습니다. 단, 주의하십시오. 디버그 콘솔에서 직접 명령어를 실행하는 것은 테스트되지 않았으며 일부 경우 Visual Studio Code가 충돌할 수 있습니다.
기타 디버깅 기능
- 무조건 중단점
- 주시 창
- 호출 스택
- 단계 실행
Visual Studio Code로 디버깅하는 것에 대한 자세한 내용은 Visual Studio Code의 디버깅 소개를 참조하십시오.
C/C++ 앱을 디버깅할 수 있도록 launch.json 파일을 구성하는 추가 방법에 대해서는 C/C++ 디버깅 구성을 참조하십시오.
Natvis 프레임워크
디버거에서 C++ 개체에 대한 사용자 지정 보기를 **Natvis** 프레임워크를 사용하여 만듭니다. Natvis와 C/C++ 확장을 사용하는 것에 대한 자세한 내용은 네이티브 개체에 대한 사용자 지정 보기 토픽을 읽을 수 있습니다.
원격 디버그
Docker 컨테이너에서 디버깅하는 것과 같은 원격 프로세스에 연결하는 것에 대한 자세한 내용은 파이프 전송을 참조하십시오.
디버거 디버깅
확장 프로그램의 디버깅 문제로 인해 보고서에서 진단할 수 없는 경우, 로깅을 활성화하고 로그를 보내달라고 요청할 수 있습니다. C/C++ 확장 로그를 얻는 방법은 디버그 어댑터에 대한 로깅 활성화를 참조하십시오.
알려진 제한 사항
심볼 및 코드 탐색
모든 플랫폼
- 확장 프로그램은 함수 본문을 구문 분석하지 않기 때문에 **정의 미리보기** 및 **정의로 이동**은 함수 본문 내에서 정의된 심볼에 대해 작동하지 않습니다.
디버깅
Windows
- Cygwin 및 MinGW의 GDB는 실행 중인 프로세스를 중단할 수 없습니다. 애플리케이션이 실행 중일 때(디버거 아래에서 중지되지 않음) 중단점을 설정하려면, 또는 디버깅 중인 애플리케이션을 일시 중지하려면 애플리케이션 터미널에서 Ctrl-C를 누릅니다.
- Cygwin의 GDB는 코어 덤프를 열 수 없습니다.
Linux
ptrace: Operation not permitted라는 오류가 표시될 수 있습니다. 이는 GDB가 프로세스에 연결하기 위해 상승된 권한이 필요하기 때문입니다. 다음 해결 방법을 사용하여 해결할 수 있습니다.-
프로세스에 연결을 사용할 때 디버깅 세션이 시작되기 전에 암호를 제공해야 합니다.
-
이 오류를 일시적으로 비활성화하려면 다음 명령어를 사용합니다.
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope -
이 오류를 영구적으로 제거하려면
/etc/sysctl.d/에10-ptrace.conf라는 파일을 추가하고kernel.yama.ptrace_scope = 0을 추가합니다.
-
macOS
- LLDB
- LLDB로 디버깅할 때, 중단 모드에서 터미널 창이 닫히면 디버깅이 중지되지 않습니다. **중지** 버튼을 눌러 디버깅을 중지할 수 있습니다.
- 디버깅이 중지되어도 터미널 창은 닫히지 않습니다.
- GDB
- macOS에서 GDB를 사용하려면 추가 수동 설치 단계가 필요합니다. README의 *OS X용 GDB 수동 설치*를 참조하십시오.
- GDB로 프로세스에 연결할 때 디버깅 중인 애플리케이션은 중단할 수 없습니다. GDB는 애플리케이션에 연결하기 전이나 애플리케이션이 중지된 상태일 때 설정된 중단점만 바인딩합니다. 이는 GDB의 버그 때문입니다.
- GDB로 디버깅할 때 코어 덤프를 로드할 수 없습니다. GDB가 macOS에서 사용되는 코어 덤프 형식을 지원하지 않기 때문입니다.
- GDB로 프로세스에 연결될 때, break-all은 프로세스를 종료합니다.
다음 단계
자세한 내용은 계속 읽어보세요.
- Linux용 Windows Subsystem을 위한 Visual Studio Code 구성
- Mingw-w64 및 GCC를 위한 Visual Studio Code 구성
- macOS를 위한 Visual Studio Code 구성
- C/C++ 디버깅 구성 - 추가 디버거 구성 옵션에 대해 알아보십시오.
- 기본 편집 - 강력한 Visual Studio Code 편집기에 대해 알아보십시오.
- 코드 탐색 - 소스 코드를 빠르게 이동합니다.
- 작업 - 프로젝트 빌드 등을 위해 작업을 사용합니다.
- 디버깅 - Visual Studio Code 디버거에 대해 알아보십시오.
다른 질문이 있거나 문제가 발생하는 경우 GitHub에 문제를 제기해 주십시오.