[Linux] 환경 기반 개발 도구 사용법에 대한 자세한 설명

[Linux] 환경 기반 개발 도구 활용

0. 서문

Linux 운영 체제에서 개발하려면 Linux 운영 체제에서 환경 기반 개발 도구를 사용하는 방법을 배워야 합니다.

1. 리눅스 패키지 관리자 냠

냠 소개

yum 도구는 Linux 운영 체제(centos)의 소프트웨어 저장소입니다.

이미지-20230716195858903

  • yum은 Linux 운영 체제에서 직접 구성됩니다.
  • yum은 원격 서버에서 해당 소프트웨어를 자동으로 찾아 로컬로 다운로드할 수 있습니다.
  • 오픈소스 시스템인 리눅스 운영체제는 자체 커뮤니티를 갖고 있으며, 그 커뮤니티에는 전 세계 프로그래머들이 리눅스 운영체제의 코드를 유지하고 개선하고 있다. 리눅스 운영체제를 사용하여 개발하는 기업과 개인이 많기 때문에 그들의 개발은 리눅스 운영체제에 의존하고 있으며, 리눅스 운영체제 커뮤니티의 작업을 촉진하기 위해 리눅스 커뮤니티에 돈과 서버를 기부할 예정이다. Linux 운영 체제 사용자를 위해 yum을 사용하여 소프트웨어를 다운로드할 수 있도록 서버를 설정하는 기능.

냠의 사용

다운로드할 소프트웨어 보기:

yum list | grep 软件名
  • yum으로 설치할 수 있는 소프트웨어는 여러 가지가 있는데, yum list 명령을 직접 사용하면 많은 양의 소프트웨어 정보가 표시되므로, 파이프와 grep 명령을 사용하여 원하는 소프트웨어를 필터링할 수 있습니다.

SL 소프트웨어의 정보를 확인하십시오(아래 그림은 쿼리된 정보의 일부를 보여줍니다):

이미지-20230716202336383

  • 정보의 첫 번째 열은 소프트웨어 이름입니다.
  • 정보의 두 번째 열은 버전 번호입니다. (엘은 센토스입니다)
  • 정보의 세 번째 열은 소프트웨어 소스입니다.

소프트웨어를 다운로드하고 설치합니다.

sudo yum -y install 软件名
  • sudo는 일반 사용자를 이용하여 슈퍼유저로 명령을 실행하며, 슈퍼유저만이 소프트웨어를 설치할 수 있습니다.
  • sudo를 일반 사용자가 사용하려면 먼저 구성해야 합니다.
  • -y 옵션은 제거 프로세스 중에 설치 확인을 방지하기 위한 것입니다.
  • 소프트웨어가 설치되면 시스템의 모든 사용자가 사용할 수 있습니다.

수퍼유저를 사용하여 sl 소프트웨어를 설치합니다.

이미지-20230716204114911

소프트웨어 제거:

sudo yum -y remove 软件名
  • sudo는 일반 사용자를 사용하여 슈퍼유저로 명령을 실행하며, 슈퍼유저만이 소프트웨어를 제거할 수 있습니다.
  • sudo를 일반 사용자가 사용하려면 먼저 구성해야 합니다.
  • -y 옵션은 제거 프로세스 중에 제거 확인을 방지하는 것입니다.

sl 소프트웨어를 제거해 보십시오:

이미지-20230716202907720

일반 사용자이므로 삭제에 실패하여 슈퍼유저로 제거하셔야 합니다.

수퍼유저를 사용하여 소프트웨어를 제거합니다.

이미지-20230716203437590

-y 옵션이 사용되지 않으므로 소프트웨어 제거를 확인하려면 y를 입력해야 합니다.

이미지-20230716203408073

성공적으로 제거되었습니다.

냠 소스

소프트웨어 스토어로서 yum은 소프트웨어의 다운로드 주소를 알아야 하며, 이러한 다운로드 주소는 일반적으로 구성 파일에 저장되며 이러한 구성 파일은 yum 소스가 됩니다.

  • yum 소스는 /etc/yum.repos.d/ 경로에 저장됩니다.
  • yum 소스 내의 링크를 수정하여 yum 소스를 업데이트하거나 수정할 수 있습니다.
  • Linux 운영 체제가 탑재된 클라우드 서버의 yum 소스는 구성되어 있으며 일반적으로 업데이트할 필요가 없습니다.

보려면 yum 소스가 있는 디렉터리로 이동하세요.

이미지-20230716205837273

냠 소스 보기:

이미지-20230716210116670

이미지-20230716210134794

yum 소스에서 업데이트:

  1. 이전 yum 소스를 백업합니다(백업하려면 mv 명령 사용).
  2. wget은 새로운 yum 소스 구성 파일을 얻습니다(네트워크 검색을 통해 얻을 수 있음).
  3. mv는 이전 yum 소스의 이름으로 이름이 변경되었습니다.
  4. 냠 모두 청소 && 냠 makecache。

소프트웨어에 대하여

  • 소프트웨어 안정성은 기능적 다양성보다 더 중요합니다.
  • 새 버전의 소프트웨어에는 많은 기능이 있지만 누구도 발견하지 못한 많은 문제가 있을 것이며 새로운 문제이기 때문에 일반적으로 짧은 시간 내에 해결하기 어렵습니다.
  • 이전 버전의 소프트웨어에는 기능이 적고 특정 문제가 있지만 장기간 사용으로 인해 기존 문제에는 일반적으로 해당 솔루션이 있습니다.
  • 소프트웨어는 공식 소프트웨어와 확장 소프트웨어로 구분됩니다.
  • 확장 소프트웨어는 일반적으로 비교적 새로운 버전이거나 비교적 새로운 소프트웨어입니다.
  • 공식 소프트웨어에는 일반적으로 장기간 사용 후에도 신뢰할 수 있는 것으로 간주되는 확장 소프트웨어가 포함되어 있습니다.
  • 설치할 소프트웨어를 찾을 수 없는 경우 확장 소프트웨어 소스에 있을 수 있습니다. sudo yum install -y 소프트웨어 이름 -release를 사용하여 일치하는 yum 소스를 찾은 다음 설치할 수 있습니다.

2. 리눅스 편집기-vim

vim 소개

vim은 Linux 운영 체제에 내장된 다중 모드 편집기입니다.

  • vim은 텍스트 편집에만 사용할 수 있는 편집기입니다.
  • Vim에는 명령 모드, 삽입 모드, 최종 모드, 대체 모드, 보기 모드 등 5가지 기본 모드가 있습니다.
  • Linux에서는 vim 명령을 직접 입력하여 vim이 존재하는지 확인할 수 있습니다.

Linux에서는 vim을 입력하세요.

이미지-20230716212910687

Shift+:를 입력한 다음 q를 입력하여 vim을 종료합니다.

vim 기본 모드

이미지-20230802152332454

명령 모드

vim을 실행했을 때의 모드는 명령 모드이며, 명령 모드에서는 입력을 할 수 없습니다.

  • 전환하려는 모드에 관계없이 명령 모드에서 전환해야 합니다.
  • 어떤 모드에서 esc를 눌러도(여러 번 누를 수 있음) 명령 모드로 돌아갈 수 있습니다.

아무 작업도 수행하지 않고 빈 파일을 열려면 vim을 사용하십시오. 명령 모드입니다.

이미지-20230716213605188

삽입 모드

텍스트 편집은 삽입 모드에서 수행할 수 있습니다.

  • 삽입 모드로 들어가려면 명령 모드에서 (i/a/o)를 입력하세요.

이미지-20230728183931856

맨 아래 행 모드

최종 모드는 파일의 지정된 콘텐츠 저장, 찾기 또는 바꾸기와 같은 작업을 수행하는 데 사용됩니다.

  • 명령 모드 를 입력하여 삽입 모드로 들어 갑니다 shift+:.
  • 최종 모드에서 변경 사항을 저장하지 않고 파일을 직접 종료하려면 q를 입력합니다.
  • 최종 모드에서 w를 입력하면 파일을 종료하지 않고 변경 사항이 저장됩니다.
  • 최종 모드에서 wq를 입력하면 변경 사항이 저장되고 파일이 종료됩니다.
  • 최종 모드에서 !를 추가하면 수정 사항이 강제로 저장되거나 파일이 종료됩니다.

이미지-20230728184517581

교체 패턴

대체 모드에서는 커서가 위치한 문자가 키보드에서 입력한 문자로 대체됩니다.

  • 명령 모드 를 입력하여 삽입 모드로 들어 갑니다 shift+r.

이미지-20230728200306238

보기 모드

보기 모드는 블록 편집, 즉 특정 영역을 선택하고 텍스트를 연속적이고 빠르고 효율적으로 편집하는 것을 목표로 합니다.

  • 명령 모드 를 입력하여 보기 모드로 들어갑니다 ctrl+v.

보기 모드의 일괄 주석:

  1. 보기 모드로 전환

이미지-202308021458135762. 커서를 움직여 주석을 추가할 코드 줄을 선택합니다.

이미지-20230802145924166

  1. I(대문자) 및 //를 입력합니다.

이미지-20230802150059995

  1. 일괄 주석을 완료하려면 esc를 누르세요.

이미지-20230802150131882

보기 모드에서 배치의 주석 처리를 해제합니다.

  1. 보기 모드로 전환

이미지-20230802150258530

  1. 커서를 이동하여 삭제할 주석을 선택합니다.

이미지-20230802150340214

  1. 주석을 해제하려면 d를 누르세요.

이미지-20230802150408566

맨 아래 행 모드의 명령 요약

  • 줄 번호를 기억하고 제거합니다. set nu / set nonu
  • 지정된 콘텐츠 검색: /要搜索的指定内容 – 다음 일치 항목 보기, n 누르기, 이전 일치 항목으로 이동, Shift+n 누르기
  • vim을 종료하지 않고 Linux 명령을 실행합니다. !执行的命令
  • 지정된 필드를 지정된 필드로 바꿉니다. %s/替换前的字段/替换后的字段/g
  • 동시에 다른 파일 열기: vs 要打开的文件 – 커서를 다른 파일로 전환하려면 Ctrl 키를 누른 채 w를 빠르게 두 번 누르세요.

명령 모드의 명령 요약

  • 커서가 있는 곳에 여러 줄의 코드를 복사합니다. (n)yy – yy 명령을 사용하여 코드를 복사하기 전에 숫자를 입력하지 않으면 현재 줄을 복사하는 것입니다.

  • 이전에 복사한 코드 줄을 커서가 있는 줄 옆 줄에 붙여넣습니다. (n)p - 이전에 숫자를 입력하지 않고 p 명령을 사용하여 코드를 붙여넣는 경우, 커서가 있는 줄 옆 줄에 한 번 붙여넣는다는 의미입니다. 커서는.

  • 이전 작업 실행 취소: u – 맨 아래 행 모드에서 w를 입력하여 저장된 수정 사항은 여전히 ​​실행 취소할 수 있습니다.

  • 마지막 실행 취소 실행 취소: ctrl+r – 맨 아래 행 모드에서 w를 입력하여 저장된 변경 사항은 계속 실행 취소할 수 있습니다.

  • 현재 줄이 있는 곳에서 여러 줄의 코드 잘라내기: (n)dd – 잘라낸 코드 줄은 (n)p명령을 사용하여 붙여 넣을 수 있습니다. 붙여넣지 않고 잘라내는 것은 삭제 작업과 동일합니다.

  • 텍스트의 마지막 줄로 이동합니다. shift+g / G

  • 텍스트의 첫 번째 줄로 이동합니다. gg

  • 지정된 텍스트 줄로 이동: n shift+g / n G

  • 현재 텍스트 줄의 시작 부분으로 이동합니다. shift+$

  • 현재 텍스트 줄의 끝으로 이동합니다. shift+^

  • 단어로 나눈 후 앞으로 이동합니다. b

  • 단어로 나눈 후 뒤로 이동: w

  • 빠른 대소문자 전환: shift+~ – 한 번 누르면 커서가 위치한 문자가 대문자와 소문자로 전환되고 커서는 자동으로 다음 위치로 이동합니다.

  • 커서 위치를 포함한 여러 문자를 지정된 문자로 바꿉니다. (n)r 要替换的指定字符

  • 커서와 오른쪽 커서를 포함하여 여러 문자를 삭제합니다. (n)x

  • 커서와 왼쪽 커서를 포함하여 여러 문자를 삭제합니다. (n)X

  • 커서 위치 이동: h(왼쪽) j(아래) k(위) l(오른쪽)

vim 간단한 구성

  • /etc/ 디렉터리 아래에는 vimrc라는 파일이 있는데, 이는 시스템의 공개 구성 파일이며 모든 사용자에게 유효합니다.

  • 각 사용자의 홈 디렉터리 /home/xxx에 ".vimrc"라는 이름의 개인 구성 파일을 생성할 수 있습니다. 이것은 사용자의 개인 구성 파일이며 해당 사용자에게만 유효합니다.

예를 들어 일반 사용자가 자신의 홈 디렉터리에 ".vimrc" 파일을 생성한 후 해당 파일에 set nu 명령을 입력하고 저장하면 다음에 vim을 열 때 줄 번호가 자동으로 표시됩니다.

vim의 구성은 상대적으로 복잡하고 일부 vim 구성에는 플러그인을 사용해야 하므로 직접 하나씩 구성하지 않는 것이 좋습니다. 더 간단한 방법은 다음 명령을 직접 실행하는 것입니다(vim 구성을 적용하려는 사용자 아래에서 이 명령을 실행합니다. 루트에서 직접 실행하는 것은 권장되지 않습니다). 컬 -sLf
https://gitee.com/ HGtz2222 /VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

그런 다음 프롬프트에 따라 루트 비밀번호를 입력하십시오.

그런 다음 설치 구성을 기다린 후 마지막으로 소스 ~/.bashrc를 수동으로 실행합니다.

이미지-20230728204036234

설정이 완료되면 자동완성, 줄번호 표시, 자동 들여쓰기 등의 기능을 사용할 수 있습니다.

3. 리눅스 컴파일러 gcc/g++

gcc/g++는 C언어와 C++를 각각 컴파일하는데 사용되는 컴파일러로, gcc와 g++의 사용방법(명령어)은 동일합니다.

프로그램의 완전한 편집

gcc [-o 要生成的文件名] 要编译的文件

참고: gcc 文件名 파일 컴파일을 완료하고 현재 디렉터리에 a.out이라는 실행 프로그램을 생성할 수 있습니다. 생성된 프로그램의 파일 이름을 지정하려면 -o를 추가하세요.

이미지-20230729154321844

프로그램의 분산 편집

프로그램 컴파일의 전체 과정:

  1. 전처리
  2. 엮다
  3. 편집
  4. 링크

파일 전처리

gcc -E 要处理的文件名 [-o 要生成的文件名]

참고: 생성된 파일의 이름을 .i 접미사로 지정하는 것이 좋습니다.

test.c 파일을 전처리하여 test.i 파일을 생성합니다.

이미지-20230729154739105

test.i는 test.c에 의해 전처리되므로 test.c의 헤더 파일을 확장하여 코드 줄 수를 늘리고 매크로 교체, 조건부 컴파일 및 주석이 제거되므로 test.i 파일에 매크로 정의, 조건부 컴파일 및 주석을 볼 수 없으며 현재 파일 내용은 여전히 ​​C 언어입니다.

파일을 컴파일

gcc -S 要处理的文件名 [-o 要生成的文件名]

참고: 생성된 파일의 이름은 .s 접미사로 지정하는 것이 좋습니다. 전처리 결과 파일이나 소스 파일에서 작업할 수 있습니다.

test.s 파일을 얻기 위해 전처리를 통해 얻은 test.i 파일을 컴파일합니다.

이미지-20230729155519168

test.s는 test.i에서 컴파일됩니다. 컴파일하는 동안 C 언어 코드는 어셈블리 언어로 변환됩니다.

파일 조립

gcc -c 要处理的文件名 [-o 要生成的文件名]

참고: 생성된 파일 이름에는 .o 접미사를 사용하는 것이 좋습니다. 전처리 결과 파일, 컴파일된 결과 파일 및 소스 파일에 대해 작업할 수 있습니다.

test.o 파일을 얻기 위해 컴파일을 통해 얻은 test.s 파일을 어셈블합니다.

이미지-20230729160202816

test.o는 test.s에서 컴파일됩니다. 어셈블리 중에 컴파일된 파일은 실행 불가능한 바이너리 코드로 변환됩니다.

파일 링크

파일 연결을 위한 특별한 명령 옵션은 없으며 프로그램 전체 컴파일을 위한 지침만 사용됩니다.Linux 시스템에는 C 언어 라이브러리가 내장되어 있으며 컴파일러가 자동으로 연결 프로세스를 완료합니다.

연결을 위해 실행 프로그램이 사용하는 라이브러리를 확인하세요.

ldd 可执行程序文件名

실행 프로그램에 연결된 라이브러리를 보려면 ldd를 사용하십시오.

이미지-20230729160943100

동적 및 정적 라이브러리

컴파일러가 링크하는 라이브러리는 정적 라이브러리와 동적 라이브러리로 구분됩니다 .

정적 라이브러리: 정적 라이브러리를 링크할 때 정적 라이브러리에 있는 해당 코드가 실행 프로그램에 복사되므로 정적 라이브러리에 링크된 프로그램이 더 많은 공간을 차지하게 됩니다. 프로그램 실행, 정적 라이브러리는 일반적으로 접미사로 .a를 사용합니다.

동적 라이브러리: 동적 라이브러리를 링크할 때 동적 라이브러리에 있는 해당 코드의 주소가 실행 프로그램에 복사되므로 동적 링크 프로그램은 메모리를 덜 차지하지만, 정적 라이브러리가 사라지면 프로그램은 작동하지 않습니다. 정상적으로 실행될 수 있습니다.동적 라이브러리는 일반적으로 접미사가 .so입니다.

정적 라이브러리:

장점: 라이브러리에 의존하지 않고 독립적으로 실행할 수 있으며 프로그램의 이식성이 높습니다.

단점: 공간을 많이 차지한다.

동적 라이브러리:

장점: 공간을 덜 차지하며 여러 프로그램이 동적 공유 라이브러리의 코드를 함께 사용할 수 있습니다.

단점: 라이브러리에 의존하고 독립적으로 실행이 불가능하며 프로그램 이식성이 낮다.

file 명령을 통해 프로그램의 링크 상태를 확인하십시오.

이미지-20230729165622754

mytest 실행 프로그램이 동적 링크와 공유 라이브러리를 사용하는 것을 볼 수 있습니다.

gcc [-o 要生成的文件名] 要编译的文件 -static

참고: C 언어 정적 라이브러리가 설치되어 있지 않은 경우 이를 실행하여 설치할 수 있으며 , C++ 정적 라이브러리를 실행하여 설치할 yum install -y glibc-static수도 있습니다 .yum install -y libstdc++-static

gcc로 컴파일할 때 -static 명령 옵션을 추가하여 정적으로 링크된 프로그램을 얻으세요:

이미지-20230729165909556

mytest-static이 정적 링크를 사용하고, 파일 크기가 동적으로 링크된 mytest 실행 프로그램보다 크다는 것을 알 수 있습니다.

4. Linux 프로젝트 자동화 빌드 도구 - Makefile

Makefile 파일은 자동화된 컴파일 기능을 구현할 수 있는 도구입니다.

참고: Makefile은 컴파일할 소스 파일의 디렉터리에 생성되어야 합니다.

Makefile 구성

Makefile은 종속성과 종속성 메서드로 구성된 자동화된 컴파일 도구입니다.

종속성

종속성은 대상 파일과 소스 파일 간의 관계에 대한 설명입니다.

종속성 방법

종속성 방법은 소스 파일을 통해 대상 파일을 얻는 실행 방법을 나타내는 데 사용됩니다.

다음 디렉터리에 test.c 소스 파일과 Makefile( makefile ) 파일을 만듭니다.

이미지-20230729182028699

Makefile에서 test.c 파일에 대해 다음 종속성 및 종속성 메서드를 설정합니다.

이미지-20230729183004157

Makefile을 작성한 후 make 명령을 입력하여 Makefile을 실행합니다.

이미지-20230729182534882

make 명령을 실행한 후 자동화된 컴파일을 위해 Makefile에서 종속성이 자동으로 표시됩니다. mytest는 test.o에 의존하고, test.o는 test.s에 의존하고, test.s는 test.i에 의존하고, test.i는 의존합니다. test..c 종속성에서는 실행되는 종속성 메서드가 Makefile 종속성과 반대 순서로 진행됩니다.

.PHONY 키워드

.PHONY 키워드는 Makefile에서 의사 대상 파일을 식별하는 데 사용되므로 종속 관계에 해당하는 종속 메서드가 항상 완료될 수 있습니다.

Makefile에서 make 명령을 여러 번 실행합니다.

이미지-20230729184414851

일반적으로 make 명령을 여러 번 실행하면 첫 번째 실행만 성공하고, 이후 실행 시에는 이미 최신 파일이라는 오류 메시지가 보고됩니다. 이때 .PHONY 키워드만 사용하면 됩니다. 완료될 종속성을 식별합니다. 관계에 해당하는 종속성 메소드는 항상 완료됩니다. Makefile을 다음 내용으로 수정하십시오.

이미지-20230729184648767

make는 제한 없이 연속해서 여러 번 실행될 수 있습니다.

이미지-20230729184743721

일반적으로 .PHONY 키워드는 대상 파일을 정리하는 데 사용됩니다.

이미지-20230729184943944

make clean 명령을 실행하고 clean 실행을 위한 종속성 메서드에 해당하는 종속성 메서드를 지정합니다.

이미지-20230729185459003

설명하다:

  • 종속성의 소스 파일은 비어 있을 수 있습니다.
  • make 명령을 실행하면 Makefile에서 위에서 아래로 처음 스캔한 종속성에 해당하는 종속성 메서드만 완료됩니다. (첫 번째 종속성의 소스 파일이 다른 종속성에서 온 경우 함께 실행됩니다.)
  • make 명령을 실행할 때 실행할 종속 메소드를 지정할 수 있습니다.

make 명령 인식을 여러 번 실행할 수 없는 이유

make 명령은 다음과 같이 소스 파일의 마지막 수정 시간과 실행 프로그램이 생성된 시간을 비교하여 여러 번 실행할 수 없음을 식별합니다.

이미지-20230729191517204

  • 소스 파일의 마지막 수정 시간은 실행 프로그램이 생성된 시간보다 이전입니다. make 명령은 반복적으로 실행되지 않습니다.
  • 소스 파일이 실행 프로그램이 생성된 시간 이후에 마지막으로 수정된 경우 - make 명령을 실행할 수 있습니다.

stat 명령을 통해 파일 생성 및 수정 시간을 확인합니다.

기존 파일을 터치하면 파일 수정 시간을 수정할 수 있습니다.

이미지-20230729194619872

모든 키워드

all은 "all"이라는 대상을 정의하는 데 일반적으로 사용되는 키워드입니다. all 대상은 일반적으로 기본 대상으로 사용됩니다. 즉, make 명령을 실행할 때 대상을 지정하지 않으면 기본적으로 all 대상이 실행됩니다.

all 키워드의 역할을 더 잘 설명하기 위해 다음 소스 파일 test1.c 및 test2.c를 다음 내용으로 준비합니다.

이미지-20230802151058346

다음 내용으로 makefile을 만듭니다.

all:mytest1 mytest2
mytest1:test1.c
	gcc -o mytest1 test1.c
mytest2:test2.c
	gcc -o mytest2 test2.c

.PHONY:clean
clean:
	rm -f mytest1 mytest2

make 명령을 입력합니다.

이미지-20230802151312229

모든 대상의 종속성에는 mytest1 및 mytest2가 필요하므로 make 명령은 실행을 위해 mytest1 및 mytest2의 종속성 및 종속 메서드를 자동으로 검색하여 여러 파일의 일회성 자동 컴파일을 완료합니다.

여러 프로그램을 한 번에 정리하려면 make clean을 입력하세요.

이미지-20230802151516235

5. 리눅스 디버거-gdb

gdb는 Linux 시스템의 디버거입니다.

  • gdb로 디버깅하는 프로그램은 디버그 버전만 가능합니다.
  • gcc/g++로 생성된 바이너리 프로그램은 기본적으로 릴리스 모드로 되어 있으며, 디버깅을 위해 gdb를 사용하려면 소스 코드에서 바이너리 프로그램을 생성할 때 -g 옵션을 추가해야 합니다.

디버깅을 용이하게 하려면 다음 코드를 준비하세요.

#include <stdio.h>

int AddToTop(int top)
{
    
    
  printf("enter the func\n");
  int sum = 0;
  for (int i=0; i <= top; i++)
  {
    
    
    sum += i;
  }
  printf("quit the func\n");
  return sum;
}

int main()
{
    
    
  int top = 100;
  printf("the sum is %d\n", AddToTop(top));
  return 0;
}

다음 내용으로 makefile 파일을 준비합니다.

mytest:test.c
	gcc -o mytest test.c -g -std=c99
.PHONY:clean
clean:
	rm -f mytest

설명하다:

  • 코드는 루프 내에 정의된 변수를 사용하므로 컴파일 실패를 방지하려면 컴파일 중에 C99 표준 사용을 표시해야 합니다.
  • 결과 바이너리 프로그램을 디버그 버전으로 만들려면 -g 옵션을 사용하십시오.

코드와 메이크파일 파일을 준비한 후 이를 컴파일하여 실행 가능한 프로그램을 만듭니다. 실행 가능한 프로그램에 디버깅 정보가 있는지 확인하려면 다음 readelf - S mytest | grep debug확인을 사용하세요.

이미지-20230802121818005

프로그램 디버깅을 시작하려면 gdb를 사용하세요.

이미지-20230802121955983

코드 보기 명령: l(list) + 숫자--해당 줄부터 시작하는 코드를 표시합니다.

첫 번째 줄부터 시작하는 코드를 표시합니다.

이미지-20230802122552997

gdb는 마지막 명령을 기록하므로 Enter를 입력하고 Enter를 누르면 다음 코드가 계속 표시됩니다.

이미지-20230802122627028

중단점 명령: b(중단점) + 번호/소스 파일: 함수 이름 – 해당 코드 줄에 중단점을 놓습니다.

코드의 18번째 줄에 중단점을 설정합니다.

이미지-20230802122830696

기존 중단점 지침 보기: info b(breakpoint).

이미지-20230802122957922

몇가지 정보:

  • 숫자 - 중단점 번호입니다.
  • 내용 – 소스 파일과 중단점 위치를 나타냅니다.

프로그램 실행 명령: r(run) - 중단점이 있으면 중단점까지 실행하고 중지하고, 중단점이 없으면 프로그램이 끝날 때까지 실행합니다.

중단점까지 프로그램을 실행합니다.

중단점 정보를 다시 확인하십시오. 중단점 정보에는 중단점이 한 번 적중되었음을 기록합니다.

이미지-20230802123551646

중단점 삭제 명령: d(delete) + 중단점 번호 – 중단점 번호에 해당하는 중단점을 삭제합니다.

중단점 번호 1이 있는 중단점을 삭제합니다.

이미지-20230802123840597

중단점 끄기 명령: 중단점 중단점 번호를 비활성화합니다.

중단점 번호 2를 끕니다.

이미지-20230802124410058

참고: Enb 정보 열은 중단점이 닫혔음을 나타내고 y는 중단점이 열려 있음을 나타냅니다.

중단점 활성화 명령: 중단점 중단점 번호를 활성화합니다.

중단점 번호 2를 시작합니다.

이미지-20230802124551179

코드 지침을 단계별로 실행합니다: n(다음).

실행이 프로그램을 실행한 후 다음을 입력하여 코드를 단계별로 실행합니다.

이미지-20230802135656755

명령문별로 코드 지침 명령문을 실행합니다: s(step).

run이 프로그램을 실행한 후 s를 입력하여 명령문별로 코드 명령문을 실행합니다.

이미지-20230802135754713

bt 명령을 통해 함수 호출 구조를 볼 수 있습니다.

이미지-20230802140115556

모니터 변수 명령: p/display 변수 이름 – p는 한 번만 표시함을 의미하고, display는 영구 표시를 의미하며, undisplay+number는 영구 표시를 취소함을 의미합니다.

변수 값을 모니터링합니다.

이미지-20230802140502040

1번 영구 디스플레이 취소:

이미지-20230802140838468

점프 코드 지침: + 숫자까지 – 함수 본문에서 해당 줄로 코드를 점프합니다.

AddToTop 함수의 10번째 줄로 이동합니다.

이미지-20230802141517544

현재 함수의 실행 명령을 완료합니다. 완료 - 현재 함수의 실행을 직접 완료합니다.

AddToTop 함수 실행을 직접 완료하고 반환 값을 가져옵니다.

이미지-20230802141731958

다음 중단점 위치 명령으로 점프: c(계속).

이미지-20230802142551214

gdb 종료 명령: 종료.

추천

출처blog.csdn.net/csdn_myhome/article/details/132063646