VEDA 복습/리눅스, 리눅스 프로그래밍

VEDA 33일차 - GDB, CMake, Git, Docker

잡학다식을꿈꾼다 2025. 4. 30. 17:18
반응형

 

GDB(내용 복습)

GDB 구성

 

core dump : fault 발생 시 당시 스택, 레지스터 값 등을 파일로 저장, 그 당시의 상황을 재현하는 것이 디버깅에 있어서 매우 중요

 

문제가 발생한 경우 스택(backtrace), 레지스터(info reg *)를 확인하는 것이 좋다.

 

시작과 종료

gdb [프로그램명] : 시작

q(quit) or ctrl+d : 종료

소스보기(list)

브레이크 포인트

b func : func 함수의 시작부분에 브레이크 포인트 설정

b 10 : 10행에 브레이크 포인트 설정

b *0x8049000 : 특정 주소에 브레이크 포인트 설정

tb : b와 같으나 1회용 브레이크 포인트. 문법은 b와 동일

info b : 현재 브레이크 포인트 보기

cl : 브레이크 포인트 지우기

d : 모든 브레이크 포인트 지우기

진행 명령어

r(run) : 프로그램 수행

k(kill) : 프로그램 수행 종료

s(step) : 현재 행 수행 후 정지, 함수 호출시 함수 안으로 들어감

s 5 : s 다섯번 수행

n(next) : 현재 행 수행 후 정지, 함수 호출시 함수 수행 다음 행으로 감

n 5 : n 다섯번 수행

c(continue) : 다음 브레이크 포인트까지 진행

u : 현재 루프를 빠져나감

finish : 현재 함수를 수행하고 빠져 나감

return : 현재 함수를 수행하지 않고 빠져 나감

return : 위와 같으나 리턴값 지정

와치 포인트

watch [변수명] : 특정변수에 와치 포인트를 설정하고, 특정변수가 바뀔 때마다 브레이크가 걸리면서 이전/현재 값을 출력한다.

변수출력 관련

info locals : 현재 스택의 로컬변수 모두를 출력

info variables : 전역변수 모두 출력 (스압)

p [변수명] : 해당변수 value 출력

포인터변수 입력시 주소값 출력, *포인터변수명 -> 실제 value 출력

p $[레지스터명] : 레지스터값 출력

p *[포인터] : struct/class의 배열일 때 배열의 크기를 알림

p /[출력형식][변수명] : 출력형식에 맞추어 변수값 출력

t : 2진수

o : 8진수

d : 부호없는 10진수

u : 부호없는 10진수

x : 16진수

c : 최초 1바이트 값을 문자형으로 출력

f : 부동소수점

a : 가장 가까운 심볼의 오프셋 출력

p (캐스팅)[변수명] : 변수를 캐스팅하여 출력 ( p (char*)ptr )

p [포인터변수or배열]+[숫자] : 특정 주소 + 숫자 위치 출력 ( p (array[1]+4) )

p [변수명] = [value] : 특정 변수의 값을 설정

info registers : 레지스터 전체 출력

display [변수명] : 매번 p 치기 귀찮으니 특정변수 진행 중 계속 출력

p와 동일한 방식으로 출력형식 지정가능

disalbe display [번호] : 일시적으로 디스플레이 중단

enable display [번호] : 중단했던 번호 다시 출력

undisplay [번호] : 출력하던 display 변수 제거

스택 상태 검사

info f : 스택 프레임 내용 출력

info args : 함수 호출시 인자를 출력

info locals : 함수의 지역변수를 출력

info catch : 함수의 예외 핸들러를 출력

bt : 전체 스택 프레임 출력(콜스택)

frame [스택번호] : 스택번호의 스택 프레임으로 이동

up : 상위 스택 프레임으로 이동

up [숫자] : 숫자만큼 상위 스택프레임으로 이동

down : 하위 스택 프레임으로 이동

down [숫자] : 숫자만큼 하위 스택프레임으로 이동

메모리 상태 검사

x/[범위][출력형식][범위의단위] [메모리주소나 함수명]

범위 : 기본 4바이트 단위

출력 형식

t : 2진수

o : 8진수

d : 부호없는 10진수

u : 부호없는 10진수

x : 16진수

c : 최초 1바이트 값을 문자형으로 출력

f : 부동소수점

a : 가장 가까운 심볼의 오프셋 출력

s: 문자열로 출력

i : 어셈블리 형식으로 출력

범위의 단위

b : 1 byte

h : 2 byte

w : 4 byte

g : 8 byte

ex) x/10 main : main 함수로부터 40 byte 출력

기타

disas [함수명] : 특정함수의 어셈블리 코드 출력

disas [주소] [주소] : 주소 사이의 어셈블리 코드 출력

call [함수명(인자)] : 특정 함수를 인자값으로 호출

jump *[주소] : 주소로 강제적으로 분기

jump [행번호] : 특정 행으로 강제 분기

jump [함수명] : 특정 함수로 강제 분기

info signals : signal 종류 출력

info tab키 : info로 확인 가능한 명령어 출력

set {타입}[주소] = [값] : 특정 메모리에 값을 지정 ( set {int}0x8048300 = 100 )

 

출처 : https://mitny.github.io/articles/2016-08/gdb-command

 

Posts | MitNy.log

기록 저장소

mitny.github.io

 

CMake

make는 세세한 기능을 제공하지만, 동시에 해주어야 하는 일이 많다. => CMake : CMakeLists.txt 파일만 작성하면 빌드를 알아서 해준다. 에디터를 이용하는 경우 자동으로 파일의 변경 상태를 반영하여 CMakeList를 수정해주는 기능을 제공하기도 한다. 거의 make의 연장선이다.

 

 

 

 

내용 정리가 잘되어 있다.

https://cho001.tistory.com/229

 

CMake 총정리 및 자세한 설명

C++ 프로젝트를 위한 CMake 사용법 CMake 사용법 실행 파일 및 라이브러리 만들기 CMake 란? CMake 는 빌드 파일을 생성해주는 프로그램 입니다. 다시 말해 CMake 를 통해서 프로젝트를 빌드를 하는 것이

cho001.tistory.com

 

Git : 분산 버전 관리 시스템, 협업 도구

https://velog.io/@delilah/GitHub-Git-%EB%AA%85%EB%A0%B9%EC%96%B4-%EB%AA%A8%EC%9D%8C

 

[GitHub] Git 명령어 모음

_ # INDEX _ _ Git 명령어 _ 명령어 | 명령어 | 내용 설명 | |:----------:|:----------:| | $ git init | .git 하위 디렉토리 생성 | | $ git add 파일명 | 수정사항 중, 커밋에 추가 | | $ gi

velog.io

 

Docker

컨테이너 를생성·관리·배포하는오픈소스플랫폼 ○ 운영체제수준가상화 (컨테이너) 기술을 활용해 소프트웨어를 패키징·배포하는 플랫폼이며, PaaS(Platform as a Service)를 구현할 때 기반 기술로 활용됨.

○ Docker ≠ Paas

■ Docker는 PaaS를 만들기 위한 기본 기술임.

● 애플리케이션을 인프라와 분리하여 빠르게 배포 가능

○ 운영 체제 위에 설치되어, 컨테이너 단위로 애플리케이션을 실행

○ 컨테이너 안에 필요한 환경을 포함하므로, 호스트 운영 체제와 무관하게 동일한 실행 환경을 제공함

 

도커 설치(ubuntu version)

https://haengsin.tistory.com/128

 

Ubuntu 에 Docker 설치

실행환경 Ubuntu 22.04 Docker 설치방법 1. 우분투 시스템 패키지 업데이트 sudo apt-get update 2. 필요한 패키지 설치 sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common 3. Docker의

haengsin.tistory.com

 도커 관련해서는 다시 공부해야 할 듯 하다.

반응형