이 페이지에서

코드 분석

방법: 분석

통합 코드 분석 도구를 사용하여 정적 코드 분석을 수행하고, 메모리 누수를 감지하며, CPU 및 메모리 사용량을 프로파일링하고, 코드 커버리지를 확인하고, 추적 이벤트를 시각화할 수 있습니다.

코드 분석 도구 사용

코드 분석 도구를 사용하려면 ‘ Analyze ’ 메뉴 또는 ‘ 시작 프로젝트 디버깅 시작 (Start Debugging of Startup Project)’ 버튼의 풀다운 메뉴에서 해당 도구를 선택하십시오. ‘ Debug ’ 모드에서는 디버거 도구 모음의 메뉴에서 도구를 선택하여 도구를 전환할 수 있습니다.

디버그 모드의 성능 분석기

Debug 모드에서 뷰를 화면의 새로운 위치로 드래그할 수 있습니다. 뷰의 크기와 위치는 향후 세션을 위해 저장됩니다. 뷰를 원래 크기와 위치로 재설정하려면 View > Views > Reset to Default Layout 을 선택하십시오.

코드 분석 도구 개요

다음 표는 Qt Creator 에서 코드를 분석하는 데 사용할 수 있는 코드 분석 도구를 설명합니다. 일부 도구는 Qt Creator 에 기본으로 포함되어 있는 반면, 다른 도구는 컴퓨터에 별도로 설치하거나 서버에서 실행할 수 있습니다.

도구언어사용 가능 여부설명
Axivion SuiteC, C++, C#Axivion 서버 필요코드, 아키텍처, 종속성, 메트릭 및 코딩 가이드라인을 분석합니다.
Clang-Tidy 및 ClazyC, C++, Objective-C내장스타일 위반, 인터페이스 오용 및 Qt 관련 문제에 대한 진단을 찾아내고 수정 사항을 적용합니다.
Chrome 추적 형식 시각화 도구모든내장Chrome Trace Format으로 타사 도구에서 생성된 트레이스를 탐색합니다.
CocoC, C++, C#, QML, Tcl설치 필요테스트되지 않은 코드, 중복된 테스트 및 사멸 코드를 찾습니다.
CppcheckC, C++설치 필요애플리케이션을 실행하지 않고도 C 및 C++ 코드에서 정의되지 않은 동작과 위험한 코딩 구문을 찾아냅니다.
Heob모든설치 필요 (Windows)Windows에서 메모리 누수 및 버퍼 오버런을 찾아냅니다.
성능 분석기모든내장 기능 (Linux)Linux 데스크톱 및 임베디드 장치에서 애플리케이션의 CPU 및 메모리 사용량을 분석합니다.
QML ProfilerQML, JavaScript내장응용 프로그램에서 발생하는 속도 저하 및 응답 없음과 같은 일반적인 성능 문제의 원인을 파악합니다.
QML 및 JavaScript에 대한 정적 검사QML, JavaScript내장구문 오류, 누락된 속성, 유형 불일치 등 코드에서 흔히 발생하는 문제를 찾아냅니다.
Valgrind모든설치 필요 (Linux, macOS 10.9-11.0, Intel 전용)메모리 누수, 메모리 오류 및 스레딩 문제를 감지합니다.

C 및 C++에 대한 정적 분석

Axivion Suite

Axivion Suite는 아키텍처 일관성을 추적하고, 팀 전체에 걸쳐 코딩 지침을 적용하며, 연속적인 빌드에 걸친 품질 추세를 측정하는 엔터프라이즈급 소프트웨어 품질 제품군입니다. C, C++ 및 C#을 지원합니다.

Axivion Suite를 사용하면 다음을 수행할 수 있습니다.

  • 소스 코드에서 잠재적인 런타임 오류를 확인합니다.
  • 메트릭을 사용하여 소스 코드의 내부 품질에 대한 정량적 정보를 생성할 수 있습니다.
  • 스타일 검사를 실행하여 코딩 지침 준수를 달성할 수 있습니다.
  • 소스 코드 내 중복 코드 및 유사한 코드 조각을 탐지할 수 있습니다.
  • 다양한 수준에서 순환 의존성을 식별할 수 있습니다.
  • 도달할 수 없는 코드를 탐지합니다.

Axivion Suite를 설치하고 Qt Creator 에서 Axivion 플러그인을 활성화하여 위반 사항, 메트릭 및 인라인 주석을 포함한 분석 결과를 확인하십시오.

자세한 내용은 다음을 참조하십시오:

Clang-Tidy 및 Clazy

Qt Creator 에는 C, C++ 및 Objective-C 코드를 위한 상호 보완적인 정적 분석 도구인 Clang-Tidy와 Clazy에 대한 기본 지원이 포함되어 있습니다. 기본적으로 편집 중인 열려 있는 파일에 대한 진단 결과가 실시간으로 표시됩니다. 이를 통해 별도의 빌드 단계를 기다릴 필요 없이 코드 품질과 일관성을 유지할 수 있습니다.

Clang-Tidy는 스타일 위반, 인터페이스 오용, 버그 발생 가능성이 높은 패턴 등 일반적인 프로그래밍 오류를 검사합니다. 또한 오래된 C++ 코드의 현대화를 포함하여 감지된 많은 문제에 대해 자동 수정 기능을 제공합니다.

Clazy는 Clang 진단 기능에 더해 Qt 전용 검사 기능을 추가합니다. 검사 항목은 불필요한 메모리 할당부터 Qt API의 오용에 이르기까지 다양합니다. 또한 Clazy는 발견된 문제 중 일부를 수정하기 위한 리팩토링 작업도 제공합니다.

자세한 내용은 다음을 참조하십시오:

Cppcheck

Cppcheck는 C 및 C++ 코드에서 정의되지 않은 동작과 위험한 코딩 구문을 찾아내는 데 중점을 둔 경량 정적 분석 도구입니다. 이 도구는 애플리케이션을 빌드하거나 실행하지 않고도 소스 코드를 분석합니다.

Cppcheck는 범위를 벗어난 액세스, null 포인터 참조, 초기화되지 않은 변수 사용, 리소스 누수, 의심스러운 정수 산술 연산 등 광범위한 문제를 탐지합니다. 전체 검사 목록은 Cppcheck: 검사 목록을 참조하십시오.

Cppcheck를 별도로 설치하고, 결과를 통합하려면 ‘ Qt Creator ’에서 Cppcheck 플러그인을 활성화하십시오. Cppcheck는 열린 파일에 대해 자동으로 실행되며, ‘ Analyze ’ > ‘ Cppcheck ’에서 선택한 파일에 대해 수동으로 실행할 수도 있습니다.

자세한 내용은 Cppcheck를 사용하여 C++ 코드에서 오류 감지하기를 참조하십시오.

QML 및 JavaScript

QML 및 JavaScript에 대한 정적 검사

내장된 정적 분석기를 사용하면 JSLint를 사용하는 것과 유사하게 프로젝트의 QML 및 JavaScript 코드에 대해 정적 검사를 실행하여 일반적인 문제를 찾을 수 있습니다.

이 검사는 애플리케이션을 실행하지 않고도 구문 오류, 누락되거나 철자가 틀린 속성, 유형 불일치 및 기타 일반적인 실수를 포착합니다.

자세한 내용은 JavaScript 및 QML 검사를 참조하십시오.

QML Profiler

Qt Creator QML Profiler 가 함께 제공되어 QML 코드 실행 시 바인딩 평가 및 신호 처리를 검사할 수 있습니다. 이를 사용하여 코드 검사만으로는 발견하기 어려운 성능 병목 현상을 파악할 수 있습니다.

QML Profiler 신호 처리, 바인딩 평가, JavaScript 실행과 같은 이벤트를 기록하고 타임라인 뷰에서 시각화합니다. 이는 속도 저하 및 응답 불량 현상을 진단하는 데 유용합니다.

자세한 내용은 다음을 참조하십시오:

메모리 분석

Valgrind

Valgrind 툴 스위트에서 Memcheck 및 Callgrind를 설치하고, Qt Creator 에서 Valgrind 플러그인을 활성화하여 Linux 및 macOS(10.9-11.0, Intel 전용)에서 메모리 오류를 감지하고 함수 실행을 프로파일링할 수 있습니다. 어떤 개발 호스트에서든 원격 Linux 머신이나 장치에서 해당 도구를 실행할 수 있습니다.

Memcheck은 해제된 메모리에 대한 읽기 또는 쓰기, 초기화되지 않은 메모리 사용, 메모리 누수, 할당 함수의 잘못된 사용과 같은 메모리 관리 문제를 찾아냅니다. Callgrind는 함수의 호출 이력과 캐시 사용 통계를 기록합니다.

Valgrind 도구는 개발 호스트에서 로컬로 실행하거나 다른 호스트에서 원격으로 실행할 수 있습니다. 이 도구를 사용하여 Qt Creator 에서 프로젝트를 설정한 애플리케이션은 물론, 프로젝트가 없는 애플리케이션도 분석할 수 있습니다.

프로젝트가 설정된 애플리케이션을 분석하기 위해 Valgrind 도구를 실행하려면, Qt Creator 에서 해당 프로젝트를 열고 프로젝트를 실행할 키트를 선택하십시오. 키트는 Valgrind 도구를 로컬에서 실행할지 원격에서 실행할지 지정합니다.

Valgrind 도구에 대한 기본 설정을 지정하려면 Preferences > Analyzer > Valgrind 을 선택하십시오. 프로젝트별 설정( Run Settings )에서 각 프로젝트에 대한 일반 설정을 재정의할 수 있습니다.

자세한 내용은 다음을 참조하십시오:

Heob

Windows에서는 버퍼 오버런 및 메모리 누수를 감지하기 위해 Heob 힙 관찰기를 설치하십시오.

Heob은 버퍼 오버런이 발생하면 액세스 위반 오류를 발생시키고, 문제의 명령어와 버퍼 할당에 대한 스택 트레이스를 기록합니다. Heob이 정상적으로 종료된 후 결과를 확인할 수 있습니다.

자세한 내용은 다음을 참조하십시오:

프로파일링 및 추적

성능 분석기

Linux에서는 성능 분석기를 사용하여 Linux 데스크톱 및 임베디드 장치에서 애플리케이션의 CPU 및 메모리 사용량을 분석할 수 있습니다.

Performance Analyzer는 리눅스 커널에 포함된 Perf 도구를 사용하여 애플리케이션의 호출 체인을 주기적으로 스냅샷으로 캡처하고, 이를 타임라인 뷰 또는 플레임 그래프로 시각화합니다.

자세한 내용은 성능 분석기를 참조하십시오.

Chrome 추적 형식 시각화 도구

Chrome 추적 형식 시각화 도구를 사용하여 Chrome 추적 이벤트를 확인하세요. 이 도구는 내장된 추적 뷰어(chrome://tracing)를 사용하여 시각화하기 어려운 대용량 추적 파일을 볼 때 특히 유용합니다.

Chrome 기반 도구 외에도 여러 추적 도구가 Chrome 추적 형식으로 된 Chrome 추적 이벤트 정보를 생성할 수 있습니다. 이 시각화 도구를 사용하면 추적 내의 이벤트를 탐색하고, 확대/축소하며, 자세히 살펴볼 수 있습니다.

자세한 내용은 다음을 참조하세요:

코드 커버리지

Coco

Coco 코드 커버리지 툴체인을 설치하고, C, C++, C#, QML 및 Tcl 프로그램에 대해 Qt Creator 에서 Coco 플러그인을 활성화하십시오. 예를 들어, 테스트 스위트의 일환으로 애플리케이션이 실행되는 방식을 분석하는 데 이를 활용할 수 있습니다. 분석 결과를 바탕으로 테스트를 더욱 효율적이고 완벽하게 개선할 수 있습니다.

다음과 같은 작업을 수행할 수 있습니다:

  • 테스트되지 않은 코드 섹션을 찾을 수 있습니다.
  • 제거할 수 있는 중복 테스트를 찾아냅니다. Coco는 테스트로 커버되는 소스 코드 부분을 식별할 수 있습니다. 또한 새로운 테스트가 기존 테스트에서 커버하지 않는 소스 코드 줄을 커버하는지 여부를 감지할 수 있습니다.
  • 절대 실행되지 않는 코드를 표시하여 사멸 코드를 찾아냅니다.
  • 각 실행 시 테스트 커버리지를 극대화할 수 있도록 최적의 테스트 실행 순서를 계산합니다. 이는 특히 수동 테스트에 유용합니다.
  • 애플리케이션의 두 가지 별도 버전을 분석하고 차이점을 비교할 수 있습니다. 이를 통해 소스 코드 수정으로 인해 영향을 받는 테스트를 파악할 수 있을 뿐만 아니라, 패치나 핫픽스의 테스트 커버리지를 어느 정도 측정할 수도 있습니다.
  • 애플리케이션 및 테스트의 실행 시간을 측정합니다.

자세한 내용은 다음을 참조하십시오:

관련 항목: 프로젝트용 키트 활성화, 방법: 분석, 분석기, 플러그인 활성화 및 비활성화.

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.