디버깅
디버거를 사용하여 다음을 수행할 수 있습니다:
- 실행 가능한 바이너리 파일 디버깅 - GNU 심볼릭 디버거(GDB), Microsoft 콘솔 디버거(CDB), 저수준 가상 머신(LLVM) 프로젝트의 디버거인 LLDB.
- QML 및 JavaScript 코드와 Qt Quick 애플리케이션 디버깅 - QML/JavaScript 디버거.
- Python 소스 코드 디버깅 - PDB.
디버거 설정
Qt Creator 는 시스템에서 발견된 디버거 중에서 각 키트에 적합한 디버거를 자동으로 선택합니다. 다른 키트를 선택할 수도 있습니다. 각 키트에 사용할 디버거와 컴파일러를 지정하려면 ‘ Preferences ’ > ‘ Kits ’로 이동하십시오.

디버거가 없거나(예: Windows에서 CDB 디버거를 직접 설치해야 하는 경우) Qt Creator 에서 설치된 버전을 지원하지 않아 자동 설정이 실패한 경우에만 디버거를 설정해야 합니다. 예를 들어, 시스템에 GDB가 설치되어 있지 않거나 설치된 버전이 오래된 경우, 대신 로컬에 설치된 대체 디버거를 사용하려는 경우입니다.
자동으로 감지된 키트의 디버거를 변경하려면, Preferences > Kits > Clone 로 이동하여 키트의 복사본을 생성한 다음, 복제된 키트의 매개 변수를 변경하십시오. 프로젝트에 대해 복제된 키트를 활성화해야 합니다.
더 많은 디버거 표시
사용하려는 디버거가 자동으로 감지되지 않는 경우, Preferences > Kits > Debuggers > Add 로 이동하여 디버거를 추가하십시오.

자동으로 감지된 디버거 목록을 새로 고치려면 Re-detect 를 선택하십시오.
Windows용 디버깅 도구를 사용하려면 해당 도구를 설치해야 합니다. 선택 사항으로, 로컬에서 찾을 수 없는 Microsoft 모듈의 심볼 정보가 필요한 경우 Microsoft 심볼 서버를 설정할 수 있습니다.
자세한 내용은 지원되는 디버거 및 CDB 경로를 참조하십시오.
디버거 실행
디버거는 디버깅 대상 프로세스를 시작하는 위치와 방식에 따라 다양한 작동 모드로 실행됩니다. 일부 모드는 특정 운영 체제나 플랫폼에서만 사용할 수 있습니다.
- 'Start internal'은 Qt Widgets 기반 애플리케이션과 같이 Qt Creator 내에서 개발된 애플리케이션을 디버깅하는 데 사용됩니다. 이는 데스크톱용 Qt XML 버전을 사용하는 모든 프로젝트와 일반 C++ 프로젝트를 포함하여 대부분의 프로젝트에 대한 기본 시작 모드입니다.
- '외부 시작(Start external )'은 적절한 Qt Creator 프로젝트 설정 없이 로컬 또는 원격 컴퓨터에서 프로세스를 시작하고 디버그하기 위한 모드입니다.
- 'Attach to'를 사용하면 로컬 또는 원격 컴퓨터에서 Qt Creator 외부에서 이미 시작되어 실행 중인 프로세스를 디버그할 수 있습니다.
- 'Core'는 Unix에서 중단된 프로세스를 디버그하는 데 사용됩니다.
- Post-mortem: Windows에서 충돌한 프로세스를 디버그합니다.
일반적으로 F5 키와 Start Debugging of Startup Project 버튼을 누르면 상황에 맞는 작동 모드가 시작됩니다. 따라서 데스크톱 Windows를 대상으로 하는 MinGW 툴체인을 사용하는 C++ 애플리케이션의 경우, GDB 엔진은 내부 시작 모드로 시작됩니다. C++ 플러그인을 사용하는 QML 애플리케이션의 경우, QML/C++ 혼합 엔진이 시작되며, C++ 부분은 GDB 및 GDB 서버 원격 디버깅에 의해 처리됩니다.
프로젝트의 실행 설정에서 실행 구성 매개변수(예: ` Run in Terminal`)를 변경하거나, ` Debug ` > ` Start Debugging ` 메뉴에서 옵션을 선택하여 다른 작동 모드를 선택할 수 있습니다.
GDB 실행 모드
GDB 디버거는 지원되는 다양한 플랫폼과 환경에 대응하기 위해 여러 모드로 실행됩니다:
- 일반 모드는 콘솔 입력이 필요 없는 로컬에서 시작된 프로세스를 디버깁니다.
- 터미널 모드는 콘솔이 필요한 로컬에서 시작된 프로세스를 디버깅합니다.
- 애태치(Attach) 모드는 ` Qt Creator` 외부에서 시작된 로컬 프로세스를 디버깁니다.
- 코어 모드는 시스템 충돌로 인해 생성된 코어 파일을 디버깅합니다.
- 원격 모드는 리눅스에서 실행 중인 GDB 서버와 상호작용합니다.
애플리케이션 중지
실행 중인 애플리케이션이 종료되기 전에 중단하거나, 애플리케이션이 제대로 작동하지 않는 원인을 파악할 수 있습니다. 중단점을 설정하여 애플리케이션을 중지한 후 변수를 검사 및 변경하고, 새로운 중단점을 설정하거나 기존 중단점을 제거한 다음, 애플리케이션 실행을 재개할 수 있습니다.
애플리케이션이 디버거의 제어 하에서 실행되기 시작하면 평소와 같이 동작하고 수행됩니다.
실행 중인 C++ 애플리케이션을 중단하려면 [ Debug ] > [ Interrupt]으로 이동하십시오. 애플리케이션이 중단점에 도달하면 디버거가 자동으로 애플리케이션을 중단합니다.
애플리케이션이 중지되면 Qt Creator 는 다음과 같은 작업을 수행합니다.
- 애플리케이션의 현재 위치에서 호출 스택을 나타내는 데이터를 가져옵니다.
- 로컬 변수의 내용을 가져옵니다.
- 식을 검사합니다.
- C++ 기반 애플리케이션을 디버깅 중인 경우 레지스터, 모듈 및 디스어셈블러 보기를 업데이트합니다.
변수를 확인하고 변경하거나, 중단점을 설정 또는 제거한 다음, 애플리케이션 실행을 계속할 수 있습니다.
데이터 검사
응용 프로그램이 중지되면 디버거에서 특정 데이터를 검사할 수 있습니다. 데이터의 사용 가능 여부는 응용 프로그램을 컴파일할 때의 컴파일러 설정과 응용 프로그램이 중지된 정확한 위치에 따라 다릅니다.
예기치 않은 이벤트를 예외라고 하며, 예외가 발생하면 디버거가 애플리케이션을 중지할 수 있습니다. 예외가 발생한 코드 위치로 이동하면 문제를 조사하고 해결 방법을 찾는 데 도움이 됩니다.
예를 들어, 텍스트를 표시하는 변수가 있는데도 애플리케이션이 이를 올바르게 표시하지 않는 경우, 데이터가 잘못되었거나 표시 텍스트를 설정하는 코드에 문제가 있을 수 있습니다. 코드를 단계별로 실행하며 변수의 변화를 확인하면 오류가 발생하는 위치를 파악할 수 있습니다.
다음 동영상은 변수 값을 확인하는 방법을 보여줍니다:
원격 디버깅
Qt Creator 을 통해 원격 디버깅이 간편해집니다. 일반적인 경우, 원격 컴퓨터에 GDBserver와 같은 디버그 서버가 이미 설치되어 있고, ‘ Run ’ 버튼(또는 Ctrl+R)을 선택하면 애플리케이션의 원격 실행이 이미 설정되어 정상적으로 작동하는 상태라면, ‘ Debug ’ 버튼(또는 F5)을 선택하여 디버깅을 시작할 수 있습니다.
이 경우, ‘ Qt Creator ’는 디버그 서버와 원격 머신의 애플리케이션, 그리고 개발 호스트의 실제 디버거를 올바른 순서대로 자동으로 실행하고 연결합니다.
이러한 완전 자동화된 원격 디버깅 설정 및 실행이 불가능한 예외적인 경우를 위해, Qt Creator 는 반자동 솔루션을 제공합니다. 자세한 내용은 GDB를 사용한 원격 디버깅 및 CDB를 사용한 원격 디버깅을 참조하십시오.
디버깅 헬퍼 사용
QObjects 나 연관 컨테이너와 같은 복잡한 구조를 명확하고 간결하게 표시하기 위해, Qt Creator 는 디버깅 헬퍼라고 하는 Python 스크립트를 사용합니다.
Qt Creator xml-ph-0001@deepl.internal에는 가장 널리 사용되는 200개 이상의 Qt 클래스, 표준 C++ 컨테이너 및 스마트 포인터에 대한 디버깅 헬퍼가 기본으로 포함되어 있어, C++ 애플리케이션 개발자의 일반적인 요구 사항을 바로 충족할 수 있습니다.
디버깅 헬퍼를 사용자 정의하거나 추가할 수도 있습니다.
QML 및 Qt Quick
Qt Quick 애플리케이션을 디버깅할 때, JavaScript 함수를 디버깅하는 동안 애플리케이션의 상태를 검사할 수 있습니다. 중단점을 설정하고, 호출 스택 추적을 확인하며, 지역 변수와 표현식을 검사할 수 있습니다. 애플리케이션이 실행되는 동안 QML 객체와 사용자 인터페이스를 검사하고, JavaScript 표현식을 실행할 수도 있습니다.
자세한 내용은 ‘ Qt Quick 프로젝트 디버깅 ’ 및 ‘자습서: Qt Quick 디버깅’을 참조하십시오.
또한 ‘자습서: C++ 디버깅’, ‘방법: 디버깅’, ‘디버거’ 및 ‘키트 관리’를참조하십시오 .
Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.