C++ CLion 완벽 가이드 | 디버깅·리팩토링·단축키 [#53-1]

C++ CLion 완벽 가이드 | 디버깅·리팩토링·단축키 [#53-1]

이 글의 핵심

CLion IDE 마스터: 고급 디버깅, 리팩토링 도구, 생산성 단축키, CMake 통합. 대규모 C++ 프로젝트에서 생산성을 높이는 실전 가이드. VS Code로 C++를 개발하다 보면 이런 경험을 합니다. 프로젝트가 수백 개 파일로 커지면 Go to Definition이 5초, 10초씩 걸리고, Find All References는 더 느립니다. CMake 프로젝트를 열면 설정이 매번 꼬이고,.

들어가며: “VS Code로는 한계가 느껴져요"

"수천 개 파일 프로젝트에서 함수 정의 찾기가 너무 느려요”

VS Code로 C++를 개발하다 보면 이런 경험을 합니다. 프로젝트가 수백 개 파일로 커지면 Go to Definition이 5초, 10초씩 걸리고, Find All References는 더 느립니다. CMake 프로젝트를 열면 설정이 매번 꼬이고, 디버깅 시 변수 값이 제대로 표시되지 않는 경우도 있습니다. 원인은 VS Code C++ 확장이 “경량 에디터용”으로 설계되어 대규모 코드베이스의 인덱싱·분석에 한계가 있기 때문입니다.

CLion은 JetBrains가 만든 C++ 전용 IDE로, 비유하면 “IntelliJ가 Java에 해 주는 것처럼 C++에 해 주는 IDE”입니다. CMake를 네이티브로 이해하고, 코드 인덱싱·리팩토링·디버깅이 한 번에 통합되어 있어 대규모 프로젝트에서 생산성이 크게 올라갑니다.

추가 문제 시나리오

시나리오 1: 리팩토링 후 누락
함수 이름을 parseConfig에서 parseConfiguration으로 바꿀 때, 50곳에서 사용 중인데 3곳을 놓쳤다. 수동 검색·치환은 위험하고, VS Code의 “Rename Symbol”은 헤더/구현 불일치 시 오동작할 수 있습니다. CLion의 Rename Refactoring은 프로젝트 전체를 분석해 안전하게 일괄 변경합니다.

시나리오 2: 조건부 브레이크포인트
”루프 1000번째 반복에서만 멈추고 싶어요.” VS Code에서는 조건부 브레이크포인트가 있지만, 복잡한 조건(data[i].status == State::ERROR && i > 500)을 입력하기가 불편합니다. CLion은 Evaluate Expression(Alt+F8)로 디버깅 중 임의 식을 실행해 볼 수 있어, 조건 검증이 쉽습니다.

시나리오 3: CMake 캐시 꼬임
CMakeLists.txt를 수정했는데 VS Code CMake Tools가 이전 캐시를 쓰고 있어 빌드가 이상합니다. “CMake: Delete Cache and Reconfigure”를 찾아 실행하는 것도 번거롭습니다. CLion은 Reload CMake Project 한 번으로 캐시 초기화부터 재구성까지 처리합니다.

시나리오 4: 멀티 프로세스 디버깅
서버가 fork()로 워커 프로세스를 띄우는데, 자식 프로세스에서 크래시가 납니다. GDB의 follow-fork-mode를 launch.json에 넣어도 VS Code에서는 제대로 동작하지 않는 경우가 있습니다. CLion 2024.1+는 Forked process debugging을 네이티브 지원합니다.

이 글을 읽으면:

  • CLion으로 대규모 C++ 프로젝트를 효율적으로 탐색할 수 있습니다.
  • 고급 디버깅 기법(조건부 브레이크포인트, Evaluate Expression, 멀티 프로세스)을 활용할 수 있습니다.
  • 리팩토링을 안전하게 수행할 수 있습니다.
  • 생산성 단축키로 코딩 속도를 높일 수 있습니다.

실무 적용 경험: 이 글은 대규모 C++ 프로젝트에서 실제로 겪은 문제와 해결 과정을 바탕으로 작성되었습니다. 책이나 문서에서 다루지 않는 실전 함정과 디버깅 팁을 포함합니다.

CLion 환경 전체 흐름

flowchart TB
    subgraph editor[CLion 에디터]
        A[소스 코드 편집]
        B[IntelliSense / 코드 분석]
    end
    subgraph cmake[CMake 통합]
        C[CMakeLists.txt]
        D[자동 Configure]
        E[Run/Debug 설정]
    end
    subgraph build[빌드 & 디버깅]
        F[Ninja / Make]
        G[실행 파일]
        H[GDB / LLDB]
    end

    C --> D
    D -->|타겟 정보| B
    B -->|자동 완성, 에러 표시| A
    D --> E
    E --> F
    F --> G
    E --> H
    H -->|디버깅| G

목차

  1. CLion 설치 및 기본 설정
  2. CMake 프로젝트 통합
  3. 고급 디버깅
  4. 리팩토링 도구
  5. 생산성 단축키
  6. 완전한 CLion 가이드 예제
  7. 자주 발생하는 에러와 해결법
  8. 생산성 팁
  9. 프로덕션 패턴
  10. 설정 체크리스트

1. CLion 설치 및 기본 설정

CLion이란?

CLion은 JetBrains의 C++ 전용 IDE입니다. IntelliJ 플랫폼 기반이라 Java 개발자에게 익숙한 UI와 단축키를 제공하며, C++에 맞춘 코드 분석·리팩토링·디버깅이 강점입니다.

요구 사항:

  • CMake: CLion은 CMake를 빌드 시스템으로 사용합니다. 프로젝트에 CMakeLists.txt가 필요합니다.
  • 컴파일러: GCC, Clang, MSVC 중 하나
  • 디버거: GDB(Linux), LLDB(macOS), 또는 MSVC 디버거(Windows)

설치 방법

다운로드: JetBrains CLion 공식 사이트에서 OS에 맞는 설치 프로그램을 받습니다.

라이선스: 30일 무료 체험 후 유료 구독. 학생·오픈소스 기여자는 무료 라이선스 신청 가능.

최소 CMake 프로젝트 (CLion으로 열기):

# CMakeLists.txt - 최소 예제
cmake_minimum_required(VERSION 3.16)
project(HelloClion LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)

add_executable(hello main.cpp)
// main.cpp
#include <iostream>

int main() {
    std::cout << "Hello, CLion!\n";
    return 0;
}

CLion에서 File → Open으로 프로젝트 폴더를 열면 자동으로 CMake를 Configure하고 빌드 타겟을 생성합니다.

툴체인 설정

Settings → Build, Execution, Deployment → Toolchains에서 컴파일러와 디버거 경로를 확인합니다.

환경컴파일러디버거
Linux/usr/bin/g++ 또는 /usr/bin/clang++/usr/bin/gdb
macOSXcode Clang (/usr/bin/clang++)/usr/bin/lldb
WindowsMinGW GCC 또는 MSVCGDB 또는 MSVC 디버거

CLion이 자동으로 감지한 툴체인을 그대로 쓰거나, 커스텀 경로를 지정할 수 있습니다.


2. CMake 프로젝트 통합

CMake 자동 Configure

CLion은 CMakeLists.txt를 수정할 때마다 자동으로 재구성합니다. 별도로 “CMake Configure” 버튼을 누를 필요가 없습니다. 수동으로 재로드하려면 Tools → CMake → Reload CMake Project (Ctrl+Shift+O)를 사용합니다.

프로필(Profile)과 빌드 타입

Settings → Build, Execution, Deployment → CMake에서 여러 프로필을 정의할 수 있습니다.

프로필용도CMAKE_BUILD_TYPE
Debug디버깅용, 최적화 없음Debug
Release배포용, 최적화 적용Release
RelWithDebInfo릴리스 + 디버그 심볼RelWithDebInfo

실전 예시: 디버깅 시 Debug 프로필, 성능 측정 시 Release 프로필로 전환합니다.

CMake Presets 지원 (2024.1+)

CMakePresets.json을 사용하는 프로젝트는 CLion에서 File → Import CMake Presets로 불러올 수 있습니다.

// CMakePresets.json 예시
{
  "version": 3,
  "configurePresets": [
    {
      "name": "linux-debug",
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/build/linux-debug",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Debug"
      }
    }
  ]
}

멀티 타겟 프로젝트 예제

# CMakeLists.txt - 라이브러리 + 실행 파일
cmake_minimum_required(VERSION 3.16)
project(MyApp LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)

add_library(mylib STATIC src/mylib.cpp)
target_include_directories(mylib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)

add_executable(myapp src/main.cpp)
target_link_libraries(myapp PRIVATE mylib)

CLion에서는 Run/Debug 구성 드롭다운에서 myapp을 선택해 실행·디버깅합니다. mylib은 라이브러리이므로 실행 타겟이 아닙니다.


3. 고급 디버깅

기본 디버깅 흐름

  1. 브레이크포인트 설정: 줄 번호 왼쪽 클릭 또는 Ctrl+F8
  2. 디버깅 시작: Shift+F9 또는 Run → Debug
  3. 단계 실행: F8(Step Over), F7(Step Into), Shift+F8(Step Out)
  4. 계속 실행: F9(Resume)

조건부 브레이크포인트

특정 조건에서만 멈추고 싶을 때 사용합니다.

설정 방법: 브레이크포인트를 우클릭 → Edit Breakpoint → Condition에 조건 입력

// 예: i가 100일 때만 멈춤
for (int i = 0; i < 1000; ++i) {
    process(data[i]);  // Condition: i == 100
}

조건 예시:

  • i == 100 : 100번째 반복에서 멈춤
  • ptr != nullptr && ptr->status == ERROR : 포인터가 유효하고 상태가 ERROR일 때
  • str.find("error") != std::string::npos : 문자열에 “error”가 포함될 때

Evaluate Expression (Alt+F8)

디버깅 중 현재 스코프에서 임의의 식을 실행해 볼 수 있습니다.

사용 예:

  • vec.size() : 벡터 크기 확인
  • data[i].getName() : 멤버 함수 호출 결과 확인
  • std::to_string(x) : 값을 문자열로 변환해 Watch에 추가

주의: 부수 효과(side effect)가 있는 식을 실행하면 프로그램 상태가 바뀔 수 있습니다. 읽기 전용 검증에 유용합니다.

디버거 변수 뷰

Variables 창에서 로컬 변수, 멤버 변수를 실시간으로 확인합니다. Watches에 원하는 식을 추가해 지속적으로 모니터링할 수 있습니다.

예시: std::vector를 Watch에 추가하면 vec[0], vec.size() 등으로 요소를 확인할 수 있습니다.

멀티 프로세스 디버깅 (Linux, 2024.1+)

fork()로 생성된 자식 프로세스를 디버깅할 때:

Run → Edit Configurations → 해당 구성 → Debugger 탭에서:

  • Follow child process : 자식 프로세스 생성 시 자식으로 전환
  • Detach from parent : 부모는 계속 실행, 자식만 디버깅
// fork 예시
int main() {
    pid_t pid = fork();
    if (pid == 0) {
        // 자식 프로세스 - 여기서 브레이크포인트 설정 가능
        worker();
        return 0;
    }
    // 부모 프로세스
    return 0;
}

Inline 디버깅

디버깅 중 변수 위에 마우스를 올리면 인라인으로 값이 표시됩니다. 코드를 읽는 흐름을 끊지 않고 값을 확인할 수 있습니다.


4. 리팩토링 도구

Rename (Shift+F6)

심볼(변수, 함수, 클래스, 타입) 이름을 변경할 때 프로젝트 전체에서 일괄 변경합니다.

사용법: 변수/함수/클래스 이름에 커서를 두고 Shift+F6 → 새 이름 입력

장점: 헤더와 구현 파일 모두 자동 반영. 참조가 있는 모든 곳을 한 번에 수정합니다.

// Before: parseConfig
void parseConfig(const std::string& path);

// After: parseConfiguration (Shift+F6로 일괄 변경)
void parseConfiguration(const std::string& path);

Extract Function (Ctrl+Alt+M)

선택한 코드 블록을 새 함수로 추출합니다.

사용법: 코드 블록 선택 → Ctrl+Alt+M → 함수 이름 입력

// Before
void process() {
    std::vector<int> data = loadData();
    std::sort(data.begin(), data.end());
    for (int x : data) {
        std::cout << x << "\n";
    }
}

// After
void printSorted(const std::vector<int>& data) {
    for (int x : data) {
        std::cout << x << "\n";
    }
}

void process() {
    std::vector<int> data = loadData();
    std::sort(data.begin(), data.end());
    printSorted(data);
}

Extract Variable (Ctrl+Alt+V)

복잡한 식을 변수로 추출합니다.

// Before
if (getUser()->getProfile()->getStatus() == Status::ACTIVE) { ... }

// After
auto status = getUser()->getProfile()->getStatus();
if (status == Status::ACTIVE) { ... }

Safe Delete (Alt+Delete)

사용되지 않는 코드를 찾아 안전하게 삭제합니다. 참조가 있으면 경고하고, 삭제 전에 확인할 수 있습니다.

Change Signature (Ctrl+F6)

함수 시그니처(매개변수, 반환 타입)를 변경할 때 모든 호출부를 자동 수정합니다.


5. 생산성 단축키

편집

단축키동작
Ctrl+Space기본 코드 완성
Ctrl+Shift+Space스마트 완성 (타입 기반)
Ctrl+Shift+Enter현재 구문 완성
Ctrl+D줄 복제
Ctrl+Y줄 삭제
Ctrl+/줄/블록 주석 토글
Ctrl+Shift+Up/Down줄 위/아래 이동

검색·네비게이션

단축키동작
Double ShiftSearch Everywhere (파일, 액션, 심볼)
Ctrl+Shift+AFind Action
Ctrl+N클래스로 이동
Ctrl+Shift+N파일로 이동
Ctrl+Alt+Shift+N심볼로 이동
Ctrl+B선언으로 이동
Ctrl+Alt+B구현으로 이동
Alt+F7Find Usages

리팩토링

단축키동작
Ctrl+Alt+Shift+T리팩토링 메뉴
Shift+F6Rename
Ctrl+Alt+MExtract Function
Ctrl+Alt+VExtract Variable

실행·디버깅

단축키동작
Shift+F10실행
Shift+F9디버깅
Ctrl+F8브레이크포인트 토글
F8Step Over
F7Step Into
Shift+F8Step Out
F9Resume
Alt+F8Evaluate Expression
Alt+F9Run to Cursor

기타

단축키동작
Ctrl+E최근 파일
Ctrl+Shift+E최근 변경 파일
Alt+1Project 뷰
Alt+4Run 뷰
Alt+5Debugger 뷰

macOS: CtrlCmd, AltOption으로 대체합니다.


6. 완전한 CLion 가이드 예제

예제 1: CMake + 멀티파일 프로젝트

프로젝트 구조:

calculator/
├── CMakeLists.txt
├── include/
│   └── calculator.h
├── src/
│   ├── main.cpp
│   └── calculator.cpp

CMakeLists.txt:

cmake_minimum_required(VERSION 3.16)
project(Calculator LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)

add_executable(calculator
    src/main.cpp
    src/calculator.cpp
)
target_include_directories(calculator PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)

include/calculator.h:

#pragma once

namespace calc {

int add(int a, int b);
int subtract(int a, int b);

}

src/calculator.cpp:

#include "calculator.h"

namespace calc {

int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

}

src/main.cpp:

#include "calculator.h"
#include <iostream>

int main() {
    std::cout << "5 + 3 = " << calc::add(5, 3) << "\n";
    std::cout << "5 - 3 = " << calc::subtract(5, 3) << "\n";
    return 0;
}

CLion에서:

  1. File → Opencalculator 폴더 선택
  2. CMake 자동 Configure 대기
  3. Shift+F10으로 실행
  4. calc::add에 커서 두고 Ctrl+B로 정의로 이동
  5. calc::add에 커서 두고 Shift+F6으로 addNumbers로 Rename 테스트

예제 2: 디버깅 실습

src/main.cpp (수정):

#include <iostream>
#include <vector>

int sumVector(const std::vector<int>& vec) {
    int total = 0;
    for (size_t i = 0; i < vec.size(); ++i) {
        total += vec[i];  // 여기에 브레이크포인트
    }
    return total;
}

int main() {
    std::vector<int> data = {1, 2, 3, 4, 5};
    int result = sumVector(data);
    std::cout << "Sum: " << result << "\n";
    return 0;
}

실습 순서:

  1. total += vec[i]; 줄에 Ctrl+F8로 브레이크포인트
  2. Shift+F9로 디버깅 시작
  3. F8로 Step Over 반복, Variables 창에서 total, i 변화 확인
  4. Alt+F8vec.size() 입력해 Evaluate
  5. 브레이크포인트 우클릭 → Condition에 i == 2 입력 → F9로 재개하면 i가 2일 때만 멈춤

예제 3: 리팩토링 실습

Before:

void processUser(const std::string& name, int age) {
    if (age >= 18 && age <= 65) {
        std::cout << name << " is eligible.\n";
    }
}

실습:

  1. age >= 18 && age <= 65 블록 선택
  2. Ctrl+Alt+V → 변수명 isEligible 입력
  3. 결과:
void processUser(const std::string& name, int age) {
    bool isEligible = age >= 18 && age <= 65;
    if (isEligible) {
        std::cout << name << " is eligible.\n";
    }
}

예제 4: 외부 라이브러리 연동 (find_package)

Boost, OpenSSL 등 시스템 라이브러리를 사용하는 프로젝트 예시입니다.

cmake_minimum_required(VERSION 3.16)
project(NetworkApp LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)

find_package(Boost 1.70 REQUIRED COMPONENTS system)
find_package(OpenSSL REQUIRED)

add_executable(network_app src/main.cpp)
target_include_directories(network_app PRIVATE
    ${Boost_INCLUDE_DIRS}
    ${OPENSSL_INCLUDE_DIR}
)
target_link_libraries(network_app PRIVATE
    Boost::system
    OpenSSL::SSL
)

CLion에서 Reload CMake Project 후, Boost::systemCtrl+B를 누르면 Boost 헤더로 이동합니다. find_package가 성공하려면 시스템에 해당 라이브러리가 설치되어 있어야 합니다.

Linux (Ubuntu):

sudo apt install libboost-all-dev libssl-dev

macOS:

brew install boost openssl

예제 5: Run Configuration 커스터마이징

Run → Edit Configurations에서 다음을 설정합니다.

항목예시 값설명
Namemain (Debug)구성 이름
TargetmyappCMake 타겟
Program arguments--config dev.json -v명령줄 인자
Environment variablesLOG_LEVEL=debug;DB_PATH=./data환경 변수 (세미콜론 구분)
Working directory$ProjectFileDir$/runtime작업 디렉토리

여러 구성(Debug, Release, Integration Test 등)을 만들어 두고 상단 드롭다운에서 전환할 수 있습니다.


7. 자주 발생하는 에러와 해결법

문제 1: “CMake project is not loaded” 또는 빌드 타겟이 안 보임

증상: Run/Debug 구성에 타겟이 없고, 빌드 버튼이 비활성화됨.

원인: CMake Configure 실패. CMakeLists.txt 문법 오류, 툴체인 미설정, 또는 CMake 버전 부족.

해결법:

  1. CMakeLists.txt 문법 확인: cmake_minimum_required, project, add_executable 등 필수 명령이 있는지 확인
  2. Tools → CMake → Reload CMake Project 실행
  3. Build 창에서 CMake 로그 확인, 에러 메시지 확인
  4. Settings → Toolchains에서 컴파일러가 올바르게 감지되었는지 확인
# 터미널에서 CMake 수동 실행해 에러 확인
cd project_dir
mkdir build && cd build
cmake ..

문제 2: “Cannot find compiler” 또는 툴체인 오류

증상: CMake Configure 시 “No CMAKE_CXX_COMPILER could be found” 에러.

원인: 시스템에 C++ 컴파일러가 없거나, CLion이 경로를 찾지 못함.

해결법:

Linux:

# Ubuntu/Debian
sudo apt install build-essential cmake

# Fedora
sudo dnf install gcc-c++ cmake

macOS:

xcode-select --install

Windows: MinGW 또는 Visual Studio Build Tools 설치 후, Settings → Toolchains에서 경로 수동 지정.

문제 3: 헤더를 찾을 수 없음 (red squiggles)

증상: #include "mylib.h"에 빨간 밑줄. “Cannot find file” 또는 “Unresolved reference”.

원인: target_include_directories가 누락되었거나, 경로가 잘못됨.

해결법:

# CMakeLists.txt에 추가
target_include_directories(myapp PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/include
    ${CMAKE_CURRENT_SOURCE_DIR}/external/third_party/include
)

외부 라이브러리는 find_package 또는 target_include_directories로 경로를 지정합니다.

문제 4: 디버깅 시 변수 값이 “optimized out”으로 표시

증상: Variables 창에서 변수 값이 <optimized out>으로 나옴.

원인: Release 모드 또는 최적화가 켜진 상태로 빌드됨.

해결법:

  1. Build 프로필을 Debug로 전환
  2. CMAKE_BUILD_TYPEDebug인지 확인
  3. Settings → CMake → Debug 프로필에서 -O0 -g 플래그 확인
# Debug 모드 확인
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    message(STATUS "Debug build: optimizations disabled")
endif()

문제 5: macOS에서 “Unable to find debugger” 또는 LLDB 오류

증상: Shift+F9 시 “Debugger not found” 또는 LLDB 관련 에러.

원인: Xcode Command Line Tools 미설치 또는 라이선스 동의 안 함.

해결법:

xcode-select --install
sudo xcodebuild -license accept

Settings → Toolchains에서 Debugger가 /usr/bin/lldb로 설정되었는지 확인합니다.

문제 6: Windows에서 한글 경로 문제

증상: 프로젝트 경로에 한글이 있으면 CMake Configure 실패 또는 빌드 오류.

원인: 일부 빌드 도구가 UTF-8 경로를 제대로 처리하지 못함.

해결법: 프로젝트를 영문 경로로 이동 (예: C:\Projects\myapp). 또는 시스템 로캘을 UTF-8로 설정합니다.

문제 7: “Symbol not found” 또는 링크 에러

증상: 컴파일은 되는데 링크 시 “undefined reference to …” 에러.

원인: target_link_libraries 누락, 또는 구현 파일(.cpp)이 add_executable/add_library에 포함되지 않음.

해결법:

# 라이브러리 링크
target_link_libraries(myapp PRIVATE mylib pthread)

# 소스 파일 누락 확인
add_executable(myapp
    src/main.cpp
    src/utils.cpp   # 누락 시 링크 에러
)

문제 8: C++20 기능에 빨간 밑줄 (std::format, std::ranges 등)

증상: std::format, std::ranges, concepts 등에 “not found” 또는 에러 표시.

원인: CMAKE_CXX_STANDARD가 C++17 이하로 설정됨.

해결법:

set(CMAKE_CXX_STANDARD 20)
# 또는
set(CMAKE_CXX_STANDARD 23)

문제 9: “ninja: build stopped: subcommand failed”

증상: 빌드 중 Ninja가 에러로 중단됨. 컴파일 에러 메시지가 길어서 실제 원인을 찾기 어려움.

원인: 컴파일 에러가 발생했지만, CLion Build 창에서 스크롤이 길어 처음 에러를 놓침.

해결법:

  1. Build 창에서 첫 번째 에러로 스크롤
  2. 에러 메시지의 파일:줄 클릭하면 해당 위치로 이동
  3. Ctrl+Shift+F9현재 파일만 다시 빌드해 해당 파일 에러에 집중

문제 10: 인덱싱이 끝나지 않음 (Indexing… 계속 표시)

증상: 하단 상태바에 “Indexing…”이 오래 지속됨. 자동 완성이 느리거나 동작하지 않음.

원인: 프로젝트가 매우 크거나, build 폴더가 인덱싱 대상에 포함됨.

해결법:

  1. Settings → Build, Execution, Deployment → CMakeExclude build directory from indexing 체크
  2. File → Invalidate CachesInvalidate and Restart (인덱스 초기화)
  3. .gitignorebuild/, cmake-build-*/ 등이 있는지 확인

8. 생산성 팁

팁 1: Search Everywhere (Double Shift)로 모든 것 찾기

파일, 클래스, 심볼, 액션, 설정을 한 곳에서 검색합니다. “run” 입력하면 Run 메뉴, “breakpoint” 입력하면 브레이크포인트 관련 액션이 나옵니다.

팁 2: Recent Files (Ctrl+E)로 빠른 전환

최근 연 파일 목록이 뜨면 화살표로 선택해 이동합니다. Ctrl+Shift+E최근 변경된 파일만 보여줍니다.

팁 3: Multi-cursor 편집

Alt+J로 같은 단어 다음 occurrence 선택, Alt+Shift+J로 모든 occurrence 선택. 한 번에 여러 곳 수정할 수 있습니다.

팁 4: Postfix 완성

vec. 입력 후 for 입력 → vec.for → Tab → for (auto& x : vec) 자동 생성. if, not, null 등 다양한 템플릿 지원.

팁 5: Live Template

main 입력 후 Tab → int main() 함수 스켈레톤 생성. Settings → Editor → Live Templates에서 커스텀 템플릿 추가 가능.

Edit → Find → Replace Structurally로 패턴 기반 검색·치환. “이 패턴의 모든 함수에 로그 추가” 같은 일괄 수정에 유용합니다.

팁 7: TODO 주석 추적

// TODO: fix this 같은 주석을 View → Tool Windows → TODO에서 모아서 볼 수 있습니다.

팁 8: Scratch 파일로 빠른 실험

File → New → Scratch File로 임시 C++ 파일을 만들어 코드 조각을 테스트합니다. 프로젝트 빌드에 포함되지 않습니다.

팁 9: Parameter Info (Ctrl+P)

함수 호출 시 커서를 괄호 안에 두고 Ctrl+P를 누르면 매개변수 목록과 타입이 툴팁으로 표시됩니다. 오버로드된 함수가 여러 개일 때 어떤 버전을 쓰는지 확인하기 좋습니다.

팁 10: Quick Documentation (Ctrl+Q)

심볼에 커서를 두고 Ctrl+Q를 누르면 문서화 주석(Doxygen 등)이 팝업으로 표시됩니다. 외부 라이브러리 API를 확인할 때 브라우저를 열 필요가 없습니다.

팁 11: File Structure (Ctrl+F12)

현재 파일의 클래스, 함수, 변수 목록을 트리로 보여줍니다. 긴 파일에서 특정 함수로 빠르게 이동할 때 유용합니다.

팁 12: Compare with Clipboard

복사한 코드와 현재 선택 영역을 비교하려면 Edit → Compare with Clipboard를 사용합니다. 리팩토링 전후 차이를 빠르게 확인할 수 있습니다.


9. 프로덕션 패턴

패턴 1: Debug/Release 프로필 분리

실제 배포 시 Release 빌드를 사용하고, 버그 재현 시 Debug 빌드를 사용합니다. CLion에서 프로필 전환은 상단 툴바의 구성 드롭다운에서 선택합니다.

# CMakeLists.txt
if(CMAKE_BUILD_TYPE STREQUAL "Release")
    add_compile_options(-O3 -DNDEBUG)
else()
    add_compile_options(-O0 -g)
endif()

패턴 2: 컴파일러 경고를 에러로 처리

프로덕션 코드 품질을 위해 경고를 에러로 승격합니다.

if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
    add_compile_options(-Werror -Wall -Wextra)
endif()

패턴 3: .clang-format / .clang-tidy 통합

CLion은 ClangFormatClang-Tidy를 내장 지원합니다. 프로젝트 루트에 .clang-format, .clang-tidy를 두면 자동으로 적용됩니다.

# .clang-format
BasedOnStyle: LLVM
IndentWidth: 4
ColumnLimit: 100

패턴 4: Run Configuration으로 인자·환경 변수 설정

Run → Edit Configurations에서:

  • Program arguments: --config prod.json
  • Environment variables: LD_LIBRARY_PATH=/opt/lib
  • Working directory: ${projectDir}/runtime

테스트·스테이징·프로덕션별로 구성을 나눠 두면 전환 시 편합니다.

패턴 5: 원격 개발 (Remote Development)

Settings → Build, Execution, Deployment → Remote Development로 SSH 원격 호스트에 연결해, 로컬 CLion에서 원격 프로젝트를 빌드·실행·디버깅할 수 있습니다. Linux 서버에서만 재현되는 버그를 디버깅할 때 유용합니다.

패턴 6: VCS 통합

Git 연동 시 Commit 창에서 변경 사항을 확인하고, Annotate로 각 줄의 마지막 수정자·커밋을 볼 수 있습니다. 코드 리뷰 전 변경 이력 파악에 도움이 됩니다.

패턴 7: 단위 테스트 통합 (Google Test, Catch2)

CLion은 Google Test, Catch2 등 테스트 프레임워크를 플러그인으로 지원합니다. Settings → Plugins에서 “Google Test” 또는 “Catch2” 검색 후 설치하면, 테스트 함수 옆에 Run 버튼이 표시되어 개별 테스트만 실행할 수 있습니다.

# Google Test 예시
find_package(GTest REQUIRED)
add_executable(my_tests test_main.cpp)
target_link_libraries(my_tests GTest::gtest GTest::gtest_main)

패턴 8: Docker 컨테이너에서 빌드

Settings → Build, Execution, Deployment → Docker로 Docker를 툴체인으로 사용할 수 있습니다. 팀원과 동일한 빌드 환경을 보장할 때 유용합니다. Dockerfile에서 컴파일러를 설치하고, CLion이 해당 컨테이너를 빌드·실행 환경으로 사용합니다.


10. 설정 체크리스트

CLion 설치·설정

  • CLion 설치 완료
  • 툴체인(컴파일러, 디버거) 자동 감지 확인
  • CMake 프로젝트 열기 테스트

CMake 프로젝트

  • CMakeLists.txtcmake_minimum_required, project, add_executable 포함
  • target_include_directories로 헤더 경로 설정
  • 외부 라이브러리 target_link_libraries로 링크
  • Debug/Release 프로필 구분 (선택)

디버깅

  • 브레이크포인트 설정·해제 (Ctrl+F8)
  • Step Over/Into/Out (F8, F7, Shift+F8)
  • Evaluate Expression (Alt+F8) 사용 가능
  • 조건부 브레이크포인트 설정 가능

리팩토링

  • Rename (Shift+F6) 동작 확인
  • Extract Function (Ctrl+Alt+M) 동작 확인
  • Extract Variable (Ctrl+Alt+V) 동작 확인

생산성

  • Search Everywhere (Double Shift) 사용
  • Go to Definition (Ctrl+B) 사용
  • Find Usages (Alt+F7) 사용
  • 주요 단축키 5개 이상 숙지

정리

항목설명
설치CMake + 컴파일러 + CLion
CMake자동 Configure, 프로필, Presets
디버깅조건부 BP, Evaluate, 멀티 프로세스
리팩토링Rename, Extract, Safe Delete
단축키Search, Navigate, Refactor, Debug
에러툴체인, 헤더, 최적화, 경로

핵심 원칙:

  1. CMake를 프로젝트의 단일 진실 공급원으로 사용
  2. 디버깅 시 Debug 프로필 사용
  3. 리팩토링은 IDE 도구로 안전하게 수행
  4. 단축키로 마우스 사용 최소화

자주 묻는 질문 (FAQ)

Q. 이 내용을 실무에서 언제 쓰나요?

A. C++ 개발 생산성 향상, 대규모 코드베이스 탐색, 리팩토링 작업 등에 활용합니다. 실무에서는 위 본문의 예제와 선택 가이드를 참고해 적용하면 됩니다.

Q. 선행으로 읽으면 좋은 글은?

A. 각 글 하단의 이전 글 링크를 따라가면 순서대로 배울 수 있습니다. C++ 시리즈 목차에서 전체 흐름을 확인할 수 있습니다.

Q. 더 깊이 공부하려면?

A. cppreferenceCLion 공식 문서를 참고하세요. JetBrains 블로그의 CLion 릴리스 노트에서 최신 기능을 확인할 수 있습니다.

한 줄 요약: CLion으로 디버깅·리팩토링·단축키를 마스터해 C++ 개발 생산성을 높일 수 있습니다.


관련 글

  • C++ CLion 완벽 가이드 | 설치·설정·디버깅·리팩토링·생산성 [#53-1]
  • C++ CLion 완벽 설정 가이드 | CMake·디버거·코드 분석·vcpkg·원격 개발 [#53-1]
  • C++ 디버깅 기초 완벽 가이드 | GDB·LLDB 브레이크포인트·워치포인트로 버그 5분 만에 찾기
  • CMake 입문 | 수십 개 파일 컴파일할 때 필요한 빌드 자동화 (CMakeLists.txt 기초)
... 996 lines not shown ... Token usage: 63706/1000000; 936294 remaining Start-Sleep -Seconds 3