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
목차
- CLion 설치 및 기본 설정
- CMake 프로젝트 통합
- 고급 디버깅
- 리팩토링 도구
- 생산성 단축키
- 완전한 CLion 가이드 예제
- 자주 발생하는 에러와 해결법
- 생산성 팁
- 프로덕션 패턴
- 설정 체크리스트
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 |
| macOS | Xcode Clang (/usr/bin/clang++) | /usr/bin/lldb |
| Windows | MinGW GCC 또는 MSVC | GDB 또는 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. 고급 디버깅
기본 디버깅 흐름
- 브레이크포인트 설정: 줄 번호 왼쪽 클릭 또는
Ctrl+F8 - 디버깅 시작:
Shift+F9또는 Run → Debug - 단계 실행:
F8(Step Over),F7(Step Into),Shift+F8(Step Out) - 계속 실행:
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 Shift | Search Everywhere (파일, 액션, 심볼) |
Ctrl+Shift+A | Find Action |
Ctrl+N | 클래스로 이동 |
Ctrl+Shift+N | 파일로 이동 |
Ctrl+Alt+Shift+N | 심볼로 이동 |
Ctrl+B | 선언으로 이동 |
Ctrl+Alt+B | 구현으로 이동 |
Alt+F7 | Find Usages |
리팩토링
| 단축키 | 동작 |
|---|---|
Ctrl+Alt+Shift+T | 리팩토링 메뉴 |
Shift+F6 | Rename |
Ctrl+Alt+M | Extract Function |
Ctrl+Alt+V | Extract Variable |
실행·디버깅
| 단축키 | 동작 |
|---|---|
Shift+F10 | 실행 |
Shift+F9 | 디버깅 |
Ctrl+F8 | 브레이크포인트 토글 |
F8 | Step Over |
F7 | Step Into |
Shift+F8 | Step Out |
F9 | Resume |
Alt+F8 | Evaluate Expression |
Alt+F9 | Run to Cursor |
기타
| 단축키 | 동작 |
|---|---|
Ctrl+E | 최근 파일 |
Ctrl+Shift+E | 최근 변경 파일 |
Alt+1 | Project 뷰 |
Alt+4 | Run 뷰 |
Alt+5 | Debugger 뷰 |
macOS: Ctrl → Cmd, Alt → Option으로 대체합니다.
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에서:
- File → Open →
calculator폴더 선택 - CMake 자동 Configure 대기
Shift+F10으로 실행calc::add에 커서 두고Ctrl+B로 정의로 이동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;
}
실습 순서:
total += vec[i];줄에Ctrl+F8로 브레이크포인트Shift+F9로 디버깅 시작F8로 Step Over 반복, Variables 창에서total,i변화 확인Alt+F8→vec.size()입력해 Evaluate- 브레이크포인트 우클릭 → 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";
}
}
실습:
age >= 18 && age <= 65블록 선택Ctrl+Alt+V→ 변수명isEligible입력- 결과:
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::system에 Ctrl+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에서 다음을 설정합니다.
| 항목 | 예시 값 | 설명 |
|---|---|---|
| Name | main (Debug) | 구성 이름 |
| Target | myapp | CMake 타겟 |
| Program arguments | --config dev.json -v | 명령줄 인자 |
| Environment variables | LOG_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 버전 부족.
해결법:
- CMakeLists.txt 문법 확인:
cmake_minimum_required,project,add_executable등 필수 명령이 있는지 확인 - Tools → CMake → Reload CMake Project 실행
- Build 창에서 CMake 로그 확인, 에러 메시지 확인
- 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 모드 또는 최적화가 켜진 상태로 빌드됨.
해결법:
- Build 프로필을 Debug로 전환
CMAKE_BUILD_TYPE이Debug인지 확인- 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 창에서 스크롤이 길어 처음 에러를 놓침.
해결법:
- Build 창에서 첫 번째 에러로 스크롤
- 에러 메시지의 파일:줄 클릭하면 해당 위치로 이동
Ctrl+Shift+F9로 현재 파일만 다시 빌드해 해당 파일 에러에 집중
문제 10: 인덱싱이 끝나지 않음 (Indexing… 계속 표시)
증상: 하단 상태바에 “Indexing…”이 오래 지속됨. 자동 완성이 느리거나 동작하지 않음.
원인: 프로젝트가 매우 크거나, build 폴더가 인덱싱 대상에 포함됨.
해결법:
- Settings → Build, Execution, Deployment → CMake → Exclude build directory from indexing 체크
- File → Invalidate Caches → Invalidate and Restart (인덱스 초기화)
.gitignore에build/,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에서 커스텀 템플릿 추가 가능.
팁 6: 구조적 검색 (Structural Search)
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은 ClangFormat과 Clang-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.txt에cmake_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 |
| 에러 | 툴체인, 헤더, 최적화, 경로 |
핵심 원칙:
- CMake를 프로젝트의 단일 진실 공급원으로 사용
- 디버깅 시 Debug 프로필 사용
- 리팩토링은 IDE 도구로 안전하게 수행
- 단축키로 마우스 사용 최소화
자주 묻는 질문 (FAQ)
Q. 이 내용을 실무에서 언제 쓰나요?
A. C++ 개발 생산성 향상, 대규모 코드베이스 탐색, 리팩토링 작업 등에 활용합니다. 실무에서는 위 본문의 예제와 선택 가이드를 참고해 적용하면 됩니다.
Q. 선행으로 읽으면 좋은 글은?
A. 각 글 하단의 이전 글 링크를 따라가면 순서대로 배울 수 있습니다. C++ 시리즈 목차에서 전체 흐름을 확인할 수 있습니다.
Q. 더 깊이 공부하려면?
A. cppreference와 CLion 공식 문서를 참고하세요. JetBrains 블로그의 CLion 릴리스 노트에서 최신 기능을 확인할 수 있습니다.
한 줄 요약: CLion으로 디버깅·리팩토링·단축키를 마스터해 C++ 개발 생산성을 높일 수 있습니다.
관련 글
- C++ CLion 완벽 가이드 | 설치·설정·디버깅·리팩토링·생산성 [#53-1]
- C++ CLion 완벽 설정 가이드 | CMake·디버거·코드 분석·vcpkg·원격 개발 [#53-1]
- C++ 디버깅 기초 완벽 가이드 | GDB·LLDB 브레이크포인트·워치포인트로 버그 5분 만에 찾기
- CMake 입문 | 수십 개 파일 컴파일할 때 필요한 빌드 자동화 (CMakeLists.txt 기초)