포스팅에 앞서 현재 사용하는 운영체제는 ubuntu이다.
간단히 Linux와 Ubuntu에 대해 설명하자면,
Linux는 open-source operating system으로 computer hardware/software, system resource와 user 간의 상호 작용을 관리한다. Linux는 처음에 Linux Torvalds에 의해 개발되었으며, UNIX 운영 체제의 원리를 따르지만 완전히 자유롭고 개방된 소스로 제공된다. 이 운영 체제는 유연성, 강력한 보안, 그리고 오픈 소스 커뮤니티에 의한 지속적인 개선 덕분에 전세계적으로 널리 사용된다.
Linux는 주로 서버, 데스크탑 컴퓨터, 슈퍼컴퓨터 및 임베디드 시스템에서 널리 사용되며, 다양한 분야에서 활용되는데, 예를 들어 웹 서버, 데이터 베이스, 네트워크 운영, 소프트웨어 개발, 그리고 데스크탑 환경 등이 있다. Linux의 가장 큰 특징 중 하나는 kernel과의 상호 작용을 통해 Hardware 와 Software resource 를 관리한다는 점이다. Linux kernel은 system의 핵심적인 부분으로, 모든 기본 시스템 기능을 처리한다.
Ubuntu는 Linux 기반의 운영 체제 중 하나로, 사용하기 쉽게 초보자에게도 친숙한 User Interface를 제공한다. Ubuntu는 개인용 컴퓨터 사용을 목표로 설계되었지만, 서버 버전도 매우 인기가 있다.
system 개발을 하다보면 linux kernel을 흔히 들어봤을텐데, linux kernel은 모든 linux 기반 시스템의 핵심이며, hardware 와 software 사이의 통신 interface 역할을 한다. kernel의 주요 기능은 process management, memory management, device driver, system call, security 등을 포함한다.
Ubuntu는 Linux 기반이기에 Linux kernel을 사용하는 Linux 배포판 중 하나로, Linux kernel을 기반으로 추가적인 사용자 인터페이스와 응용 프로그램, 관리 도구 등을 포함하는 완전한 운영 체제를 제공한다.
본론으로 돌아와서 현재 사용하는 Ubuntu 환경에서 gdb에 대해 간략히 알아보고자 한다.
program 분석 및 코딩을 하다보면 덩치가 큰 코드를 만나게 될 것이고 그것을 디버깅하는 방법은 여러 가지가 있는데 그 중 하나로 gdb가 있다.
gdb를 아래의 코드를 가지고 실행을 하려한다.
// vi debug_test.cpp
#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main() {
vector<int> vi;
list<int> li;
cout << "debug" << endl;
for(int i = 0; i < 10; ++i){
cout << "\n";
auto sqr = i * i;
vi.push_back( sqr );
li.insert( li.begin(), sqr );
for(auto w : li) cout << w << "-";
}
return 0;
}
먼저, 아래 코드를 통해 debug_test.cpp 를 -g gdb 사용하기 위한 옵션과 함께 실행 파일을 만든다.
g++ -g -o debug_test debug_test.cpp
그 후, gdb debug_test를 실행시킨다.
그럼 아래와 같은 화면을 보게 될 것이다.
그 다음 line (혹은 l) 명령어를 치면 코드를 고정된 line 수 만큼 보여준다.
그 다음엔 원하는 line 에서 break 를 걸어본다.
예를 들면 여기서 16번 line에서 break를 걸고싶으면
break 16 이라는 명령어를 통해 break point를 설정한다.
그후 run (혹은 r) 을 통해 실행을 시키면 코드가 실행되면서 break point에 걸리면 stop을 하게 된다.
그리고 그 시점에서 unit test를 해보고 싶으면 원하는 unit의 값을 print 해보면 된다. (예: print vi , print li)
그리고 다음으로 넘어가고 싶다면 continue (혹은 c) 명령어로 break point를 넘어갈 수 있다.
자세한 명령어 설명은 gdb 홈페이지 혹은 gdb --help로 알아보고 여러 옵션으로 디버깅을 실행해보시면 됩니다.