|
| 1 | + |
| 2 | +# 🚀 vscode-airgapped-cpp-debug |
| 3 | + |
| 4 | +본 프로젝트는 인터넷 연결이 불가능한 **에어갭(Air-gapped) 리눅스 환경**에서 별도의 에이전트(`vscode-server`)나 `gdbserver` 설치 없이, 오직 **SSH 파이프**만을 이용하여 윈도우 VS Code에서 원격 디버깅을 수행할 수 있도록 설계된 C/C++ 프로젝트 템플릿입니다. |
| 5 | + |
| 6 | +## 🌟 주요 특징 |
| 7 | +* **Zero-Agent**: 서버에 `curl`, `wget`을 통한 추가 바이너리 설치가 필요 없습니다. |
| 8 | +* **Air-gapped Ready**: 오직 SSH(22번 포트)와 SFTP만 사용하여 작동합니다. |
| 9 | +* **Complex Structure**: 실행 파일(`a.out`)과 다중 공유 라이브러리(`.so`) 간의 의존성 디버깅을 지원합니다. |
| 10 | +* **Step-Into Support**: 메인 로직에서 라이브러리 내부 함수로 진입하는 디버깅이 가능합니다. |
| 11 | + |
| 12 | +--- |
| 13 | + |
| 14 | +## 📂 프로젝트 구조 |
| 15 | +```text |
| 16 | +. |
| 17 | +├── .vscode/ |
| 18 | +│ └── launch.json # 윈도우 VS Code용 원격 디버그 설정 (핵심) |
| 19 | +├── apps/ |
| 20 | +│ └── main_app/ # 메인 실행 프로그램 (a.out) |
| 21 | +├── libs/ |
| 22 | +│ ├── lib_b/ # 중간 공유 라이브러리 (libb.so) |
| 23 | +│ └── lib_d/ # 최하위 공유 라이브러리 (libd.so) |
| 24 | +├── Makefile # 프로젝트 전체 빌드 관리 |
| 25 | +└── build/ # 빌드 결과물 저장소 (서버 생성) |
| 26 | +``` |
| 27 | + |
| 28 | +--- |
| 29 | + |
| 30 | +## 🛠 사전 준비 사항 (Prerequisites) |
| 31 | + |
| 32 | +### 1. 리눅스 서버 (Remote) |
| 33 | +* **GDB**: `gdb`가 설치되어 있어야 합니다. (`gdb --version`으로 확인) |
| 34 | +* **SSH**: SSH 서비스가 활성화되어 있어야 합니다. |
| 35 | + |
| 36 | +### 2. 윈도우 개발 환경 (Local) |
| 37 | +* **VS Code**: `C/C++` 확장(Microsoft)이 설치되어 있어야 합니다. |
| 38 | +* **SSH Client**: 윈도우 기본 `ssh.exe`를 사용합니다. |
| 39 | +* **SSH Key**: 비밀번호 입력 없이 접속 가능하도록 `ssh-copy-id` 등으로 키 등록을 권장합니다. |
| 40 | + |
| 41 | +--- |
| 42 | + |
| 43 | +## 🚀 빠른 시작 가이드 (Quick Start) |
| 44 | + |
| 45 | +### Step 1: 소스 코드 동기화 |
| 46 | +WinSCP 또는 SFTP 도구를 사용하여 본 프로젝트 전체를 서버의 특정 경로(예: `/home/user/dev`)에 업로드합니다. |
| 47 | +> **Tip:** WinSCP의 "업데이트된 상태로 유지" 기능을 사용하면 로컬 수정 사항이 실시간으로 서버에 반영됩니다. |
| 48 | +
|
| 49 | +### Step 2: 서버에서 빌드 |
| 50 | +서버 터미널에 접속하여 루트 디렉토리에서 빌드를 수행합니다. |
| 51 | +```bash |
| 52 | +make clean |
| 53 | +make |
| 54 | +``` |
| 55 | +`build/` 폴더 내에 `a.out`, `libb.so`, `libd.so`가 생성되었는지 확인합니다. |
| 56 | + |
| 57 | +### Step 3: `launch.json` 수정 |
| 58 | +`.vscode/launch.json` 파일을 열어 다음 항목을 자신의 환경에 맞게 수정합니다. |
| 59 | +* `"pipeArgs"`: 서버 접속 주소 (`user@ip`) |
| 60 | +* `"program"`: 서버 내 `a.out` 절대 경로 |
| 61 | +* `"sourceFileMap"`: 서버 경로와 윈도우 로컬 경로 매칭 |
| 62 | + |
| 63 | +### Step 4: 디버깅 시작 |
| 64 | +1. `main.c` 또는 라이브러리 소스에 브레이크포인트를 잡습니다. |
| 65 | +2. `F5`를 눌러 디버깅을 시작합니다. |
| 66 | +3. 변수 조사, 조사식, 콜 스택 등 모든 VS Code 디버깅 기능을 활용합니다. |
| 67 | + |
| 68 | +--- |
| 69 | + |
| 70 | +## ⚠️ 주의사항 |
| 71 | +* **소스 동기화**: 서버의 소스와 윈도우의 소스가 라인 단위로 일치해야 브레이크포인트가 정확히 작동합니다. |
| 72 | +* **빌드 옵션**: 모든 Makefile에는 `-g` (디버그 심볼) 옵션이 포함되어 있어야 합니다. |
| 73 | +* **LD_LIBRARY_PATH**: 실행 시 라이브러리를 찾지 못한다면 `launch.json`의 `environment` 설정을 확인하세요. |
| 74 | + |
| 75 | +--- |
| 76 | + |
0 commit comments