이 페이지에서

디버깅

디버거를 사용하여 다음과 같은 작업을 수행할 수 있습니다:

  • 실행 가능한 바이너리 파일 디버깅 - GNU 심볼릭 디버거(GDB), Microsoft 콘솔 디버거(CDB), LLVM(로우레벨 가상 머신) 프로젝트의 디버거인 LLDB.
  • QML 및 Java 코드 및 Qt Quick 애플리케이션 디버깅 - QML/JavaScript 디버거.
  • Python 소스 코드 디버그 - PDB.

디버거 설정

Qt Creator 는 시스템에 있는 키트 중에서 각 키트에 적합한 디버거를 자동으로 선택합니다. 다른 키트를 선택할 수도 있습니다. 각 키트에 사용할 디버거 및 컴파일러를 지정하려면 환경설정 > Kits 으로 이동하세요.

키트 기본 설정

디버거가 없거나(예: Windows에서 CDB 디버거를 직접 설치해야 하는 경우) Qt Creator 에서 설치된 버전을 지원하지 않아서 자동 설정이 실패한 경우에만 디버거를 설정해야 합니다. 예를 들어 시스템에 GDB가 설치되어 있지 않거나 설치된 버전이 오래되어 로컬에 설치된 대체 버전을 대신 사용하려는 경우입니다.

자동으로 감지된 키트에서 디버거를 변경하려면 환경설정 > Kits > Clone 으로 이동하여 키트 사본을 만든 다음 복제된 키트에서 매개 변수를 변경합니다. 프로젝트에 대해 복제된 키트를 활성화해야 합니다.

사용하려는 디버거가 자동으로 감지되지 않는 경우 환경설정 > Kits > Debuggers > Add 로 이동하여 추가하세요.

키트 환경설정의 디버거 탭

Windows용 디버깅 도구를 사용하려면 해당 도구를 설치해야 합니다. 선택 사항으로 로컬에서 찾을 수 없는 Microsoft 모듈의 심볼 정보가 필요한 경우 Microsoft 심볼 서버를 설정할 수 있습니다.

자세한 내용은 지원되는 디버거CDB 경로를 참조하세요.

디버거 시작하기

디버거는 디버깅 프로세스를 시작하고 실행하는 위치와 방법에 따라 다양한 작동 모드로 실행됩니다. 일부 모드는 특정 운영 체제 또는 플랫폼에서만 사용할 수 있습니다:

  • 내부에서시작하여 Qt Creator 에서 개발된 애플리케이션(예: Qt Widgets 기반 애플리케이션)을 디버깅합니다. 이 모드는 데스크톱 Qt 버전을 사용하는 모든 프로젝트와 일반 C++ 프로젝트를 포함한 대부분의 프로젝트의 기본 시작 모드입니다.
  • 로컬 또는 원격 컴퓨터에서 적절한 Qt Creator 프로젝트 설정 없이 프로세스를 시작하고 디버깅하려면외부에서 시작하세요.
  • 이미 시작되어 외부에서 실행 중인 디버그 프로세스에연결 Qt Creator, 로컬 또는 원격 컴퓨터에서.
  • Unix에서 크래시된 프로세스를 디버깅하기 위한핵심.
  • 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 디버거는 지원되는 다양한 플랫폼과 환경에 대응하기 위해 다양한 모드로 실행됩니다:

  • 일반 모드는 콘솔 입력이 필요 없는 로컬에서 시작된 프로세스를 디버깅합니다.
  • 터미널 모드는 콘솔이 필요한 로컬로 시작된 프로세스를 디버그합니다.
  • 첨부 모드는 Qt Creator 외부에서 시작된 로컬 프로세스를 디버그합니다.
  • 코어 모드는 크래시에서 생성된 코어 파일을 디버그합니다.
  • 원격 모드는 Linux에서 실행 중인 GDB 서버와 상호 작용합니다.

애플리케이션 중지

실행 중인 애플리케이션이 종료되기 전에 중단하거나 애플리케이션이 제대로 작동하지 않는 이유를 알아낼 수 있습니다. 중단점을 설정하여 변수를 검사 및 변경하고, 새 중단점을 설정하거나 이전 중단점을 제거하기 위해 애플리케이션을 중지한 다음 애플리케이션을 계속 실행할 수 있습니다.

애플리케이션이 디버거의 제어 하에 실행되기 시작하면 평소와 같이 동작하고 수행됩니다.

실행 중인 C++ 애플리케이션을 중단하려면 Debug > Interrupt 으로 이동하세요. 디버거는 중단점에 도달하면 애플리케이션을 자동으로 중단합니다.

애플리케이션이 중지되면 Qt Creator:

변수를 검사 및 변경하고, 중단점을 설정하거나 제거한 다음 애플리케이션을 계속 실행할 수 있습니다.

데이터 검사

애플리케이션이 중지되면 디버거에서 특정 데이터를 검사할 수 있습니다. 데이터의 가용성은 애플리케이션 컴파일 시 컴파일러 설정과 애플리케이션이 중지되는 정확한 위치에 따라 달라집니다.

예기치 않은 이벤트를 예외라고 하며, 예외가 발생하면 디버거가 애플리케이션을 중지할 수 있습니다. 예외가 발생한 코드의 위치로 이동하면 문제를 조사하고 문제를 해결하는 방법을 찾는 데 도움이 됩니다.

예를 들어 텍스트를 표시하는 변수가 있는데 애플리케이션에 올바르게 표시되지 않는다면 데이터가 잘못되었거나 표시 텍스트를 설정하는 코드가 잘못되었을 수 있습니다. 코드를 단계별로 살펴보고 변수의 변경 사항을 검토하여 오류가 발생하는 위치를 찾을 수 있습니다.

다음 동영상은 변수 값을 검사하는 방법을 보여줍니다:

원격 디버깅

Qt Creator 를 사용하면 원격 디버깅을 쉽게 할 수 있습니다. 원격 컴퓨터에 이미 GDBserver와 같은 디버그 서버가 설치되어 있고 애플리케이션의 원격 실행이 이미 설정되어 있고 Run 버튼(또는 Ctrl+R)을 선택하여 작동하는 일반적인 경우, Debug 버튼(또는 F5)을 선택하여 디버깅을 시작할 수 있습니다.

이 경우 Qt Creator 이 디버그 서버를 실행하고 원격 컴퓨터의 애플리케이션과 개발 호스트의 실제 디버거를 올바른 순서로 자동으로 연결합니다.

원격 디버깅의 완전 자동 설정 및 실행이 불가능한 일부 예외적인 경우에는 Qt Creator 에서 반자동 솔루션을 제공합니다( GDB로 원격으로 디버그 및 CDB로 원격으로 디버그 참조).

디버깅 헬퍼 사용하기

QObjects 또는 연관 컨테이너와 같은 복잡한 구조를 명확하고 간결하게 표시하기 위해 Qt Creator 에서는 디버깅 헬퍼라고 하는 Python 스크립트를 사용합니다.

Qt Creator 는 가장 많이 사용되는 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.