ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [42경산] 3기 1차 라피신 회고 - shell 명령어 (3)
    Linux Shell 2025. 3. 10. 17:09

    오늘 포스팅은,

    vim 화면 분할

    vim 다중 파일 편집

    valgrind

    makefile

    gdb

    에 대해서 다룬다.

     

    1. vim 화면 분할 단축키

    • :new : 위쪽 새로운 창 분할 Ctrl+w+n
    • :sp : split 위쪽 복사 창 분할 Ctrl+w+s
    • :vs : vertical split 왼쪽 복사 창 분할 Ctrl+w+v
    • :q! 또는 :close : 화면 종료
    • 커서 위치 이동: Ctrl+w+w
      • 화면 분할 시 처음에는 분할된 화면에 커서가 위치함
      • Ctrl+w+j(k,h,l) : 아래, 위, 좌, 우 화면 이동
    • :wq [새로운 파일명] : 다른 이름으로 저장

    2. vim 여러 파일 열어서 편집하기

    • 사용법: vi file1 file2 file3
    • :ls : 현재 열린 파일 목록 및 번호 이동
    • :n : 다음 파일로 이동
    • :prev, :N : 이전 파일로 이동
    • :b숫자 : buffer를 의미. :ls 로 확인한 번호를 입력하며 해당 파일로 이동
    • :bd숫자 : buffer delete를 의미. :ls 목록에서 해당 버퍼를 숨김
    • :bw숫자 : :ls 목록에서 해당 버퍼를 제거하고 관련 모든 리소스를 해제

    3. valgrind

    valgrind [실행파일] [인자]

    프로그램 디버깅 및 프로파일링을 위한 도구 모음

    • malloc 메모리 누수 감지 가능
    • valgrind를 실행하기 위해서는 컴파일 단계에서 -g 옵션을 사용하여 오류가 발생한 지점의 파일명과 라인 번호를 포한한 상세한 디버깅 정보를 커파일된 프로그램에 추가한다.
    # 프로그램 컴파일 (-g 옵션으로 디버깅 정보를 추가)
    cc -g myprogram.c -o myprogram
    # valgrind 실행
    valgrind ./mygrogram

     

    valgrind를 통한 malloc 메모리 누수 확인

     

    4. makefile

    Makefile은 프로그램 빌드 과정을 자동화하는 도구입니다.

    주로 C/C++ 프로젝트에서 사용되며, 소스 코드 컴파일과 링킹 과정을 효율적으로 관리합니다.

     

    Makefile의 기본 구조

    • target: 생성할 파일 또는 수행할 작업
    • dependencies: 타겟 생성에 필요한 파일들
    • commands: 타겟을 생성하기 위해 실행할 명령어 (반드시 탭으로 들여쓰기)
    target: dependencies
        commands

     

    일반적으로 사용되는 메크로들

    사용자가 직접 make all, make clean 등으로 호출

    아래의 매크로들을 사용하면 프로젝트를 쉽게 정리하고 리빌드할 수 있어 개발 과정을 더욱 효율적으로 만들 수 있다.

    • all: 주로 프로젝트를 빌드하는 데 사용
    • clean: 컴파일 과정에서 생성된 오브젝트 파일(.o)을 삭제
    • fclean: clean을 수행한 후, 생성된 실행 파일이나 라이브러리 파일도 함께 삭제
    • re: re는 fclean을 실행한 후 all 타겟을 다시 실행합니다. 즉, 모든 것을 지우고 처음부터 다시 빌드하는 역할을 수행
    NAME = libft.a
    
    all: $(NAME)
    
    clean:
        $(RM) $(OBJ)
    
    fclean: clean
        $(RM) $(NAME)
    
    re: fclean all

     

    lib 파일 만들기

    • ar 명령어
      • 정적 라이브러리(아카이브 파일)을 생성하거나 수정하는 명령어
      • `.a` 확장자를 가진 파일을 생성하며, 주로 C/C++ 프로젝트에서 사용된다.
    • 옵션 s : Create or update the symbol index
      • 아카이브 파일에 심볼 인덱스(symbol index)를 생성
      • 심볼 인덱스는 링커가 라이브러리 내의 함수나 변수를 빠르게 찾을  수 있도록 돕는다.
      • 이 옵션이 없으면 링크 속도가 느려지거나 에러가 발생할 수 있다.
    • 옵션 c : Create the archive silently
      • 새로운 아카이브 파일을 생성할 때, 존재하지 않는 경우 경고 메시지를 출력하지 않도록 설정
      • 이미 존재하는 아카이브 파일을 갱신할 때도 사용됨
    • 옵션 r : Replace or insert files into the archive
      • 지정된 오브젝트 파일들을 아카이브에 추가하거나 치환
      • 만약 아카이브에 동일한 이름의 파일이 있으면 교체하고, 없으면 새로 추가한다.
    # 1. 목적 파일을 만든다.
    cc -Wall -Wextra -Werror -c *.c
    # 2. lib 파일을 만든다.
    ar scr libft.a *.o

     

    .PHONY

    makefile와 같은 폴더에 clean이나 fclean의 이름을 가진 파일이 존재하면 해당 명령어를 실행하지 않는다.

    이를 통해 makefile은 더 견고하고 효율적으로 동작하며, 잠재적인 문제들을 예방할 수 있습니다

    • .PHONY를 추가함으로써 얻는 주요 이점
      • 파일 이름 충돌 방지: 'all', 'clean', 'fclean', 're'라는 이름의 파일이 존재하더라도 해당 타겟들이 항상 실행
      • 성능 향상: Make는 .PHONY로 선언된 타겟에 대해 파일 존재 여부나 타임스탬프를 확인하지 않으므로, 빌드 과정이 더 효율적으로 진행
      • 명확성 제공: .PHONY 선언은 해당 타겟들이 실제 파일을 생성하지 않는 작업임을 명시적으로 나타냄

     

    makefile 예시

    .c.o 부분의 makefile 규칙은 C 소스 파일(.c)을 목적 파일(.o)로 컴파일하는 방법을 정의하는 확장자 규칙이다.

    이 규칙은 .c 파일이 변경될 때마다 자동으로 해당하는 .o 파일을 생성하거나 업데이트한다.

    • $< : 첫 번째 전제조건(prerequisite)을 나타내며, 여기서는 .c 파일을 의미
    • $@ : 현재 타겟(.o 파일)을 의미
    • -I includes/ : 헤더 파일을 찾을 추가 디렉토리를 지정
    # 변수 정의
    CC = gcc
    CFLAGS = -Wall -Wextra -Werror
    RM = rm -f
    NAME = libft.a
    SRC = srcs/ft_putchar.c srcs/ft_swap.c srcs/ft_putstr.c srcs/ft_strlen.c srcs/ft_strcmp.c
    OBJ = $(SRC:.c=.o)
    
    .PHONY: all clean fclean re
    
    # 확장자 규칙 정의 (.c -> .o)
    .c.o :
        $(CC) $(CFLAGS) -c $< -o $@ -I includes/
    
    # 기본 타겟 (all)
    all: $(NAME)
    
    # 라이브러리 생성 규칙
    $(NAME) : $(OBJ)
        ar rcs $(NAME) $(OBJ)
    
    clean:
        $(RM) $(OBJ)
    
    fclean: clean
        $(RM) $(NAME)
    
    re: fclean all

     

    5. vim에서 터미널 명령어 사용하기

    • :terminal 창 분할로 터미널 열기
    • :e [경로] 다른 파일 열기
    • :! [cmd] 커맨드 사용하기

    6. vim 명령어 단축키

    • Shift + * : (앞으로) 커서의 단어 찾기
    • Shift + # : (뒤로) 커서의 단어 찾기
    • Shift + ^ : 커서의 줄 맨 앞 (Home 버튼)
    • Shift + $ : 커서의 줄 맨 뒤 (End 버튼)
    • Shift + ( : 위로 화면 이동
    • Shift + ) : 아래로 화면 이동

    7. vim 디버깅 gdb

    gcc -g [입력파일] -o [출력파일
    gdb ./[출력파일]
    • break (b) : 중단점(breakpoint)를 설정
      • b [함수명]
      • b [파일명]:[줄 번호]
    • continue (c) : 프로그램 실행을 재개하여 다음 중단점(breakpoint)이나 프로그램 종료 시점까지 계속 실행
    • next (n)
      • 현재 라인에서 다음 라인으로 이동
      • 함수 호출을 만나면 함수 내부로 들어가지 않고 함수 전체를 실행한 후 다음 라인으로 이동
    • print (p)
      • p [변수명] : 변수값을 출력
      • p *ptr : 포인터 변수가 가리키는 값을 출력
      • p *ptr@4 : ptr이 가리키는 배열의 4번째 요소를 출력
    • info
      • info locals : 현재 스코프의 모든 지역 변수 값을 확인
      • info variables: 모든 전역 변수의 값을 확

     

Designed by Tistory.