
seer snap-latest
Seer - gdb용 GUI 프런트엔드
소개
Seer - Linux용 gdb의 GUI 프론트엔드입니다. (Ernie Pasveer [email protected])
이 프로젝트는 활발히 개발 중입니다. 목표는 gdb를 위한 간단하면서도 보기 좋은 GUI를 제공하는 것입니다.
버그나 원하는 기능이 있으면 제 이메일로 보고하거나 GitHub 프로젝트 페이지에 task를 생성해 주세요.
설치
Seer는 패키지 관리자 또는 소스 코드로 설치할 수 있습니다.
[!NOTE] 설치 전에 요구 사항이 충족되었는지 확인하세요.
요구 사항
-
Linux
-
C++17
-
"mi" 인터프리터가 있는 gdb (
gdb --interpreter=mi실행으로 확인) -
CMake (3.5.0 이상)
-
QT6
- 소스에서 Seer를 빌드할 때는 시스템에 배포판용 QT6 "devel" 패키지가 설치되어 있어야 합니다.
- Core
- Gui
- Widgets
- PrintSupport
- Charts
- Svg
- Qt6 빌드 지침은 여기: https://github.com/epasveer/seer/wiki/Building-Seer---Qt6
- 소스에서 Seer를 빌드할 때는 시스템에 배포판용 QT6 "devel" 패키지가 설치되어 있어야 합니다.
-
QT5
- Seer는 더 이상 Qt5로 컴파일되지 않습니다. 2.3 소스 트리가 Qt5를 지원하는 마지막 버전입니다.
- Qt5 빌드 지침은 여기: https://github.com/epasveer/seer/wiki/Building-Seer---Qt5
패키지로 설치
다음 패키지 관리자를 통해 사용할 수 있습니다:
Pamac (Manjaro)
$ pamac install seer
zypper (openSUSE Tumbleweed)
$ zypper install seergdb
Flathub
Flathub 웹사이트. 여기
$ flatpak install flathub io.github.epasveer.seer
Flatpak
베타 Seer 버전. GitHub의 Seer 릴리스 페이지.
중요: GDB Launcher에서 gdb를 실행하려면 flatpak-spawn --host가 필요합니다. https://github.com/epasveer/seer/issues/377#issuecomment-3620844808 참조.
seer.flatpak을 다운로드하세요. 설치:
$ flatpak install -y --bundle --user seer.flatpak
Snap
베타 Seer 버전. GitHub의 Seer 릴리스 페이지.
$ snap install seergdb_<version>.snap --dangerous
소스로 설치
(권장) 아래 지침에 따라 Qt6로 Seer를 빌드할 수 있습니다.
https://github.com/epasveer/seer/wiki/Building-Seer---Qt6
당분간은 아래 지침에 따라 Qt5로도 빌드할 수 있습니다.
https://github.com/epasveer/seer/wiki/Building-Seer---Qt5
뉴스
GitHub의 Seer Wiki 페이지를 확인하세요.
- v1.17 버전이 마지막 Qt5 릴리스가 될 것입니다.
- 다음 릴리스는 v2.0이며 Qt6 기반이 될 것입니다. 그러나 당분간은 여전히 Qt5로 컴파일할 수 있습니다.
- 최신 안정적인 Qt5 소스를 원한다면 여기에서 v1.17을 받으세요: https://github.com/epasveer/seer/releases/tag/v1.17
Seer 시작하기
Seer는 명령줄에서 디버깅할 프로그램을 쉽게 시작할 수 있도록 설계되었습니다. gdb에는 프로그램 디버깅을 위한 여러 방법이 있습니다. Seer도 자연스럽게 여러 방법을 지원합니다.
Seer를 실행하는 모든 방법을 보려면 Wiki로 이동하세요.
https://github.com/epasveer/seer/wiki/Starting-Seer
GUI 개요
다양한 Seer 뷰와 대화상자의 예시입니다.
메인 뷰
Seer의 메인 뷰는 다음과 같습니다:

-
소스/함수/타입/변수/라이브러리
- 프로그램에서 사용된 소스/헤더 파일 목록.
- 함수, 타입, 정적 변수 검색. 더블 클릭하면 소스 파일이 열립니다.
- 프로그램이 참조하는 공유 라이브러리 목록.
- 소스/헤더 파일 목록을 검색할 수 있습니다. 이렇게 하면 표시되는 파일 목록이 "축소"됩니다.
- 파일을 더블 클릭하면 코드 매니저에서 열립니다.
-
변수/레지스터 정보
- 변수 및 레지스터 값 표시.
- "Logger" - 변수 값을 기록합니다. 수동으로 입력하거나 코드 매니저에서 열린 파일의 변수를 더블 클릭합니다.
- "Tracker" - gdb가 중지 지점(step, next, finish 등)에 도달할 때마다 값을 표시할 변수 목록을 만듭니다. 중지 지점에 도달하면 목록의 모든 변수가 잠재적으로 새로운 값을 표시합니다.
- "Registers" - 모든 CPU 레지스터 값 표시.
-
코드 매니저.
- Seer GUI 중간 부분의 넓은 영역.
- 이 뷰에서 소스 파일이 열립니다.
- 파일의 텍스트는 ^F로 검색할 수 있습니다.
- 변수 이름을 더블 클릭하여 "Logger"에 변수를 추가할 수 있습니다. CTRL 키를 누른 상태에서 더블 클릭하면 변수 앞에 ""가 붙습니다. SHIFT 키를 누른 상태에서 더블 클릭하면 변수 앞에 "&"가 붙습니다. CTRL+SHIFT 키를 누른 상태에서 더블 클릭하면 변수 앞에 "&"가 붙습니다.
- 변수 이름을 선택하고 마우스 오른쪽 버튼을 클릭한 후 "Add variable to Tracker"를 선택하여 "Tracker"에 변수를 추가할 수 있습니다.
- 변수 이름을 선택하고 마우스 오른쪽 버튼을 클릭한 후 "Add variable to Memory Visualizer"를 선택하여 "Memory Visualizer"에 변수를 추가할 수 있습니다.
- 특정 줄에서 마우스 오른쪽 버튼을 클릭하여 중단점/출력점을 만들 수 있습니다.
- 특정 줄에서 마우스 오른쪽 버튼을 클릭하여 해당 줄까지 실행할 수 있습니다.
- 이 뷰의 탭은 탭을 더블 클릭하여 분리할 수 있습니다.
-
중단점, 감시점, 캐치점, 출력점, 수동 gdb 명령 및 로그.
- 코드 매니저 아래 영역.
- 수동 명령. gdb 또는 gdbmi 명령을 수동으로 입력합니다. 명령은 다음 Seer 사용을 위해 기억됩니다.
- 중단점 매니저. 중단점 생성 및 관리.
- 감시점 매니저. 감시점 생성 및 관리. 감시점은 변수에 접근(읽기, 쓰기, 읽기/쓰기)할 때를 모니터링합니다.
- 캐치점 매니저. 캐치점 생성 및 관리. 캐치점은 C++ throw/rethrow/catch 호출 시 실행을 중지합니다.
- 출력점 매니저. 출력점 생성 및 관리. 출력점은 중단점과 유사하지만 해당 출력점에서 변수를 출력할 수 있습니다. gdb의 'dprintf' 호출을 참조하세요.
- GDB 출력. gdb 프로그램 자체의 모든 출력 로그.
- Seer 출력. Seer 프로그램 자체의 모든 출력 로그. 진단용.
- 이 뷰의 탭은 탭을 더블 클릭하여 분리할 수 있습니다.
-
스택 프레임 정보.
- 스택 프레임 목록. 프레임을 더블 클릭하여 범위(현재 함수)를 변경할 수 있습니다.
- 스택 프레임 인자. 각 프레임에 대해 각 함수에 전달된 인자를 출력합니다.
- 스택 지역 변수. 현재 함수에 대해 지역 변수의 값을 출력합니다.
-
스레드 정보.
- 스레드 ID. 모든 스레드 목록. 스레드 ID를 더블 클릭하여 범위(현재 스레드)를 변경합니다.
- 스레드 프레임. 각 스레드에 대해 스택 프레임을 나열합니다.
-
Gdb의 역방향 디버깅 모드 지원.
- 명령 기록 켜기/끄기.
- 재생 방향을 앞으로 또는 뒤로 설정.
열기 대화상자
실행 파일 열기 대화상자가 호출되면 다음과 같습니다:

Seer 콘솔
실행 파일의 모든 텍스트 출력은 Seer 콘솔로 전달됩니다. 실행 파일에 대한 텍스트 입력도 콘솔을 통해 입력할 수 있습니다.

어셈블리 뷰
일반적으로 Seer는 코드 매니저에 소스 코드만 탭으로 표시합니다. 프로그램의 어셈블리도 탭으로 표시할 수 있습니다.
"View->Assembly View"를 선택하면 소스 코드 탭 옆에 현재 실행 중인 어셈블리를 표시하는 추가 탭이 표시됩니다. 예시는 다음과 같습니다.

소스 코드 탭과 마찬가지로 어셈블리 탭에서도 중단점을 설정할 수 있습니다. 현재 명령어는 강조 표시됩니다.
"Breakpoints" 탭과 "Stack frames" 탭의 항목을 더블 클릭하면 해당 주소의 어셈블리가 표시됩니다.
구성 설정에 정의된 대로 "Nexti" 및 "Stepi" 단축키가 있습니다. 일반적으로 "Ctrl+F5" 및 "CTRL+F6"입니다. 어셈블리 탭에서 "^F"를 사용하면 강력한 검색 바가 표시됩니다.
Seer의 어셈블리 기능은 새롭습니다. 변경 사항/기능을 자유롭게 제안해 주세요.
메모리 시각화 도구
메모리 시각화 도구에서 원시 메모리 내용을 볼 때 다음과 같습니다:
| 메모리 | 디스어셈블리 |
|---|---|
![]() | ![]() |
배열 시각화 도구
배열 시각화 도구에서 배열 내용을 볼 때 다음과 같습니다:
| 일반 | 스플라인 | 산점도 |
|---|---|---|
![]() | ![]() | ![]() |
두 배열을 X-Y 플롯으로 사용할 수 있습니다. 예를 들어, 이 간단한 'points' 배열은 도형의 X-Y 윤곽을 형성합니다.
int main() {
int points[] = {50,1,20,91,97,35,2,35,79,91,50,1};
return 0;
}
| X 값 | Y 값 | XY 값 |
|---|---|---|
![]() | ![]() | ![]() |
구조체 시각화 도구
구조체 시각화 도구에서 C/C++ 구조체 또는 C++ 클래스의 내용을 볼 때 다음과 같습니다. 이 예시는 Seer가 현재 위치한 C++ 클래스의 "*this" 내용을 보여줍니다. 기본 타입인 모든 구조체 멤버는 편집할 수 있습니다.

더 가볍지만 포인터를 따라갈 수 없고 편집할 수 없는 기본 구조체 시각화 도구도 있습니다.
이미지 시각화 도구
이미지인 원시 메모리 내용을 볼 때 이미지 시각화 도구를 사용할 수 있습니다.

지원/문의
버그나 기능에 대해 [email protected]으로 이메일을 보내거나 GitHub 프로젝트 페이지에 task를 생성하세요.
스타게이저
아름다운 세상입니다.







