# 네마이버 설명서

## 개요

네마이버는 그놈 데스크톱 환경에 잘 어울리는 독립 그래픽 디버거로 열심히 작성 중입니다. 현재 C / C++ 프로그램을 디버깅하는 잘 알려진 GNU 디버거 gdb를 백엔드로 갖추고 있습니다.

### 모양새

네마이버는 일반 그래픽 작업 환경으로 설계했으며 다양한 모양새를 갖출 수 있는 플러그인 시스템을 붙였습니다. 현재 제공하는 모양새는 디버거 모양새지만, 앞으로는 메모리 디버깅을 수행하는 valgrind 용 모양새, oprofile와 같은 프로파일 도구용 모양새를 추가할 계획입니다.

## 시작하기

이 장에서는 네마이버를 시작하는 방법을 설명하고 프로그램의 기본 모양새를 보여드립니다.

### 네마이버 시작하기

다음 방법으로 네마이버를 시작할 수 있습니다:

프로그램 메뉴

- 프로그래밍네마이버 디버거를 선택하십시오.

명령행

- `nemiver`를 입력하고 Return키를 누르십시오.

  #### 추가 명령행 옵션

  `nemiver --help-all`를 입력하여 명령행에서 네마이버에 전달할 수 있는 여러가지 옵션을 찾아볼 수 있습니다.

### 네마이버 창

네마이버를 시작할 때 다음과 같은 창을 보게 됩니다:

#### 네마이버 창

네마이버 메인 창.

네마이버 창에는 다음 요소가 들어있습니다:

메뉴 표시줄

- 메뉴 표시줄의 메뉴에는 네마이버를 활용하는데 필요한 모든 명령이 들어있습니다.

도구 모음

- 도구 모음에는 프로그램을 디버깅할 때 그대로 실행하거나 한 단계씩 실행할 때 활용할 수 있는 기본 디버깅 옵션이 들어있습니다.

소스 뷰 노트북

- 소스 파일을 열면 디버깅할 프로그램의 소스 파일을 이곳에 표시합니다.

상태 노트북

- 상태 노트북에는 디버깅할 프로그램의 정보를 표시할 몇가지 탭이 들어있습니다. 다음 구성요소가 들어있습니다:

  호출 스택

- 디버깅하는 프로그램의 호출 스택 현재 상태를 표시합니다.

변수

- 모든 지역 변수 및 함수 인자, 값 및 형식을 표시합니다.

대상 터미널

- 디버깅하고 있는 프로그램에서 터미널에 출력할 어떤 내용을 이 탭에 표시합니다.

중단점

- 이 탭에서는 설정한 모든 중단점 목록을 표시합니다. 목록의 항목을 두번 누르든지, 마우스 오른쪽 단추를 누른 후 소스로 이동을 선택하여 제각각의 중단점을 설정한 소스코드를 볼 수 있습니다. 또한 이 탭에서 중단점을 삭제, 활성화, 비활성화할 수 있습니다. 중단점에 대한 추가 정보는 nemiver-sect-breakpoints을(를) 참고하십시오.

레지스터

- 이 탭에는 모든 CPU 레지스터 및 값을 표시합니다. 자세한 내용은 nemiver-sect-registers을(를) 참고하십시오.

메모리

- 이 탭에서는 지정 메모리 위치의 현재 상태를 표시합니다. 자세한 내용은 nemiver-sect-memory을(를) 참고하십시오.

### 디버깅할 프로그램 선택

프로그램 디버깅을 시작하는 방법에는 여러가지가 있습니다. 네마이버에서는 로컬 실행 파일을 불러오고, 로컬 핵심 파일을 불러오며, 실행 프로세스에 붙거나 원격 디버깅 서버에 연결할 수 있습니다.

#### 실행 프로그램 디버깅

##### 워크벤치 활용

디버깅할 실행 프로그램을 선택하려면 파일 실행... 을 선택하여 다음 대화상자를 띄우십시오:

###### 대화상자 실행

실행할 실행 파일을 선택하는 대화상자

이 대화상자에서 디버깅할 프로그램, 명령행에서 실행시 전달할 인자 또는 옵션, 실행할 작업 디렉터리, 실행 파일을 디버깅할 때 설정해야 할 환경 변수를 설정할 수 있습니다.

##### 명령행 활용

명령행에서 디버깅할 실행 프로그램을 시작하려면, 간단하게 실행 파일의 이름을 지정하십시오. 실행 파일의 절대 경로를 입력하거나, 이미 경로상에 있을 경우 실행 파일의 베이스 이름을 간단하게 지정할 수 있습니다. 예를 들면 `/usr/bin` 경로에서 이미 실행중이라면 다음 두가지의 경우 모두 유효합니다:

- `nemiver /usr/bin/progname`

- `nemiver progname`

###### 명령행에 옵션 전달하기

디버깅할 프로그램에 명령행 옵션을 전달하려면 네마이버가 옵션을 처리하지 않도록 `nemiver "prognam --arg1 --arg2"`와 같이 따옴표로 감싸야합니다.

#### 실행 중인 프로그램 붙이기

##### 워크벤치 활용

파일 실행 중인 프로그램 붙이기... 메뉴 항목을 선택하면 다음 대화상자가 뜹니다:

###### 대화상자 붙이기

실행 중인 프로그램을 붙이는 대화상자

목록의 프로세스를 선택하고 확인을 눌러 선택한 프로그램의 디버깅을 시작하십시오. 대화상자에 바로 하단 목록에 있는 텍스트 항목에 여러가지 프로세스가 나타나는데, 이 중 일부 텍스트를 입력하여 관심있는 항목을 따로 추려볼 수 있습니다.

##### 명령행 활용

명령행에서 실행 중인 프로그램을 붙이려면 `--attach` 옵션을 활용하십시오. `--attach` 옵션에서는 PID 또는 프로세스 이름을 받아들입니다. 예를 들자면 PID 1121번으로 실행 중인 `foo` 프로세스를 디버깅한다면 `nemiver --attach foo` 명령 또는 `nemiver --attach 1121` 명령으로 시작할 수 있습니다.

#### 핵심 파일 불러오기

##### 워크벤치 활용

파일 핵심 파일 불러오기... 메뉴 항목을 선택하면, 핵심 파일을 불러올 다음 대화상자를 띄웁니다:

###### 핵심 파일 대화상자 불러오기

핵심 파일을 불러오는 대화 상자

##### 명령행 활용

핵싱 파일은 명령행에서 불러올 수 없습니다.

#### 원격 디버깅

네마이버에서는 원격 디버깅 서버에 연결할 수 있습니다.

##### 워크벤치 활용

원격 디버깅 서버에 연결하려면 파일원격 대상에 연결...을 선택하십시오.

원격 디버깅 대화상자

불러올 실행 파일과 공유 라이브러리가 있는 위치를 선택한 다음, 원격 서버에 연결할 세부 설정을 채워주십시오.

##### 명령행 활용

네마이버는 명령행에서 원격 서버에 연결하는 수단을 제공하지 않습니다.

## 네마이버 활용

이 장에서는 네마이버를 활용하여 프로그램을 디버깅하는 방법을 설명합니다.

### 기본 디버깅 동작

기본 디버깅 동작은 주 도구 모음, 디버깅 메뉴, 키보드 바로 가기 키로 접근할 수 있습니다. 대부분 일반적으로 수행하는 동작은 다음과 같습니다:

계속 진행

- 프로그램을 시작합니다. 중단점을 마주하거나 프로그램 끝에 도달하기 전까지, 또는 멈춤을 사용자가 눌러 직접 멈추기 전까지 실행합니다. 이 동작은 F5키로 접근할 수 있습니다.

다음

- 다음 구문을 실행하며 이 파일의 다음 줄에 도달하면 멈춥니다. 일부 디버거는 "한 단계 건너뛰기"라고 부릅니다. 이 동작은 F6키로 접근할 수 있습니다.

한 단계 실행

- 다음 구문을 실행하며 가능하다면 함수 내부로 한 단계 거쳐 접근합니다. 어떤 디버거에서는 "안쪽 단계 진입"으로 부릅니다. 이 동작은 F7키로 접근할 수 있습니다.

단계 벗어나기

- 현재 함수 동작 실행을 끝내고 함수 호출 코드로 돌아갔을 경우 멈춥니다. 이 동작은 Shift F7 키로 접근할 수 있습니다.

다시 시작

- 현재 실행 파일을 다시 불러오고 처음부터 실행을 시작합니다. 이 동작은 Shift F5 키로 접근할 수 있습니다.

멈춤

- 프로그램 실행을 직접 멈춥니다. 이 동작은 실행 파일을 디버거에서 실행 중일 때(계속을 눌렀을 때라든지)만 가능합니다. 이 동작은 F9키로 접근할 수 있습니다.

네마이버에서 실행 파일을 불러온 후에는 기본적으로 `main()` 함수에 중단점을 만들기 때문에 `main()` 함수에 도달하면 멈추고 입력을 기다립니다. 이 때 여러분은 프로그램을 한 단계씩 실행하거나, 변수를 확인하든지, 중단점을 추가로 설정할 수 있습니다(nemiver-sect-breakpoints 참고).

### 변수 점검

네마이버는 상태 노트북의 변수 탭에서 모든 지역 변수를 표시합니다. 여러가지 변수(또는 임의의 수식) 값을 확인하려면 변수 검사창을 활용할 수 있습니다. 변수 검사창을 띄우려면 디버깅변수 검사를 선택하십시오. 변수 검사창이 뜨면, 다음과 같은 창을 볼 수 있습니다:

변수 점검창 대화상자

입력창에 변수 이름 또는 간단한 수식(`pFoo->bar`)을 입력할 수 있으며, 변수 이름과 적용 범위가 유효하다면 해당 수식에 대한 자세한 결과를 보여줍니다.

대힌 소스 편집기에서 변수 이름을 선택하고 변수 점검창을 띄우면 선택한 변수 이름에 대한 정보 표시를 시도합니다.

#### 키보드 바로 가기 키

F12 키를 눌러 변수 점검창을 시작할 수 있습니다.

네마이버에서는 다른 대화상자에서 프로그램의 모든 전역 변수 목록을 표시합니다. 전역 변수를 표시하려면 디버깅전역 변수 표시를 선택하거나 Ctrl G키를 누르십시오.

전역 변수 대화상자

어떤 프로그램(특히 C++ 프로그램)에서는 모든 전역 변수를 조회하는데 시간이 상당히 걸릴 수도 있습니다.

### 중단점 설정

네마이버에 중단점을 설정하는 방법에는 여러가지가 있습니다. 네마이버는 새 실행 파일 디버깅을 시작할 때 `main()` 에 중단점을 자동으로 설정합니다. 추가 중단점을 설정하고 싶다면 다음 방식으로 처리할 수 있습니다:

- 중단점을 설정하려는 줄의 여백을 클릭

- 중단점을 설정하려는 위치의 줄에 커서를 두고 디버깅커서 위치의 중단점 설정 전환을 선택하거나 F8키를 눌러 중단점 설정

- 디버깅중단점 설정...를 선택하거나 Ctrl B 키를 눌러 파일에 있는 특정 함수 이름 또는 특정 위치의 중단점 설정. 이 방식은 다음과 같은 대화상자를 띄웁니다:

  중단점 설정 대화상자

  파일의 각 부분에 중단점을 설정할 수 있습니다. 동일한 이름을 지닌 하나 이상의 함수가 있다면 네마이버에서는 일치하는 모든 함수 목록을 표시하고 어떤 항목을 선택할 지 물어봅니다.

#### 비활성화한 중단점

중단점은 활성화하거나 비활성화할 수 있습니다. 디버거에서는 활성화한 중단점에 도달하는 언제든 실행을 멈출 수 있지만 다른 중단점을 비활성화 한다고 해서 상태를 바꿀 수 있진 않습니다. 이 기능을 통해 실제로 중단점을 삭제하지 않아도 임시로 중단점을 제거할 수 있습니다.

중단점을 비활성화하거나 활성화하려면 상태 노트북의 중단점 탭에서 활성화하거나 비활성화하려는 중단점 번호 옆의 확인 상자를 누르십시오. 대신, 현재 커서가 있는 줄에서 Shift F8 키를 눌러 중단점을 활성화 또는 비활성화 할 수 있습니다.

다음 그림에서는 소스 편집기에서 중단점을 활성화한 모습과 비활성화한 모습의 차이점을 보여줍니다.

활성화한 중단점의 모습

활성화한 중단점

비활성화한 중단점의 모습

비활성화한 중단점

#### 소스 파일 열기

가끔 중단점을 설정하려는 함수 이름 또는 줄 번호를 정확히 모를 경우가 있기 때문에 소스 파일을 열어 찾아봐야합니다. 파일 시스템에서 임의의 파일을 열어볼 수는 있지만, 네마이버에서는 실행 파일을 빌드하는데 사용한 소스 파일 목록을 제공할 수 있으며 목록을 통해 선택할 수 있게 합니다. 파일소스 파일 열기...를 선택하면 다음 창이 나타납니다:

소스 파일을 여는 대화상자

파일 시스템에서 임의의 파일을 선택하려면 파일 시스템에서 선택 옵션을 선택하십시오. 실행 파일을 만든 파일 목록에서 선택하려면 실행 대상에서 선택을 선택하십시오.

##### 동적으로 불러오는 모듈의 소스 파일 판단

(`dlopen()`을 활용하는 식으로) 실행 도중에 대상 실행 파일이 모듈을 불러온다면, 네마이버에서는 실제 모듈을 불러오기 전에 이 모듈을 빌드할 때 어떤 파일을 활용할 지 판단할 수 없습니다.

### 고급 디버깅

#### 레지스터

레지스터 편집 위젯은 상태 노트북의 레지스터 탭에 있습니다. 대신 Alt F5 키를 눌러 적절한 탭으로 바로 이동할 수 있습니다.

레지스터 편집 위젯

이 위젯에서는 모든 CPU 레지스터의 현재 값을 보여줍니다. 값 컬럼을 누르고 새 값을 입력하여 레지스터 값을 편집할 수 있습니다. 마지막으로 디버거를 멈춘 후 바뀐 레지스터 값은 빨간색으로 나타납니다.

#### 메모리

메모리 위젯에서는 메모리 섹션을 직접 볼 수 있습니다. 메모리 위젯에서는 프로그램을 실행하고 있을 때 어떤 일이 일어나고 있는지 저수준에서 볼 수 있습니다.

메모리 편집 위젯

메모리 뷰 위젯에서 메모리 세그먼트를 표시하려면 주소 칸에 메모리 주소를 입력하십시오. 디버깅 중인 프로그램에서 사용하는 주소 영역과 일치하는 주소라면 지정 주소에서 시작하는 메모리 값을 항목 정렬 드롭 다운 메뉴의 설정에 따라 바이트, 워드(2 바이트), 롱 워드(4 바이트) 형식으로 메모리 보기 화면에 표시합니다. 프로그램을 순차적으로 실행하는대로 메모리 값을 자동으로 업데이트합니다.

게다가 메모리 값을 볼 때, 메모리 값을 수정하는 메모리 위젯을 활용할 수 있습니다. 바이트 단위 16진수 표기 방식(메모리 위젯의 왼편) 또는 아스키 표기 방식(메모리 위젝의 오른편)으로 편집할 수 있습니다. 바뀐 값은 즉시 반영됩니다.

## 세션 저장 및 복구

네마이버에서는 나중에 상태를 되돌릴 수 있도록 디버깅 세션을 저장할 수 있습니다. 세션 저장 내용에는 어떤 실행 파일을 디버깅할 지, 어떤 환경 변수를 설정할 지, 어떤 명령행 옵션을 실행 파일에 전달할 지, 어떤 파일을 열지, 어떤 중단점을 설정하여 최근 벗어난 지점에 최대한 빠르게 돌아갈 수 있는지에 대한 정보가 들어있습니다.

### 세션 저장

네마이버에서 프로그램을 빠져나갈 때 세션을 자동으로 저장하므로 전혀 걱정하실 필요가 없습니다. 그러나 네마이버를 닫기 전에 세션을 분명하게 저장하고 싶다면 파일디스크에 세션 저장을 선택하여 동작을 처리할 수 있습니다.

### 저장한 세션 재개

#### 워크벤치 활용

파일저장한 세션 재개...를 선택하고 목록에서 세션을 선택하십시오.

##### 세션 대화상자

저장 세션에 복귀하는 대화상자

#### 명령행에서

실행하고자 하는 세션의 세션 ID를 알고 있다면 명령행에서 디버깅 세션을 시작할 수 있습니다. 예를 들자면 세션 3번을 실행하고자 한다면 `nemiver --session 3` 명령으로 처리할 수 있습니다.

## 네마이버 정보

네마이버는 Dodji Seketeli, Jonathon Jongsma, 및 다른 공헌 개발자가 작성했습니다. 네마이버 정보를 더 많이 찾아보려면 네마이버 프로젝트 웹사이트를 방문하십시오.

이 프로그램 또는 이 설명서에 대한 문제점을 보고하거나 의견이 있다면 그놈 사용자 설명서의 피드백 섹션을 살펴보십시오.

이 프로그램은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용허가서 버전 2 또는(선택에 따라)그 이상 버전의 조항에 따라 배포합니다. 라이선스 사본은 이 링크 또는 이 프로그램의 소스코드에 들어있는 COPYING 파일에서 찾아보실 수 있습니다.