Gdb 디버깅 도구 (Makfile 프로젝트 관리) 사용 방법에 대해 이야기

하나, gdb 디버깅 도구

gcc -g main.c -o 일반적으로 사용되는 주요
명령 :

  • 명령 속기 기능
  • help h 모듈별로 명령 클래스 나열
  • 도움말 클래스 특정 유형의 특정 명령 찾기
  • 목록보기 코드, 뒤에 줄 번호와 함수 이름이 올 수 있습니다.
  • list-l 온라인에서 코드보기
  • quit q gdb 종료
  • 실행 r 프로그램을 최고 속도로 실행
  • 단일 단계를 시작하고, 프로그램을 실행하고, 첫 번째 줄에서 중지하여 명령문을 실행합니다.
  • 다음 n 단계 실행
  • 단계 s 명령문별로 실행, 함수가 발견되면 실행을 위해 함수로 전송
  • 역 추적 b 뷰 함수 호출 스택 프레임 및 계층 적 관계
  • info I 함수 내부의 지역 변수 값보기
  • 프레임 f 스위치 기능 스택 프레임
  • finish는 현재 함수를 종료하고 함수 호출 지점으로 돌아갑니다.
  • 변수의 값을 설정
  • 디버깅 중 매개 변수를 전달하는 arvg [1] argv [2] 명령 줄 실행
  • print p 인쇄 변수 및 주소
  • break b 줄 번호와 함수 이름에 따라 중단 점 설정
  • 삭제 d 중단 점 삭제 d 중단 점 NUM
  • 세트 관찰 변수 표시
  • undisplay 관측 변수 취소
  • 나머지 코드를 전속력으로 계속 실행
  • 중단 점 활성화 중단 점 활성화
  • 중단 점 비활성화 중단 점 비활성화
  • x 뷰 메모리 x / 20xw는 20 개 단위, 16 진수, 단위당 4 바이트 표시
  • watch 설정된 관측점의 변수 전송 및 수정시 출력 및 표시
  • 나는 디스플레이 관찰 포인트를 본다
  • 코어 파일 ulimit -c 1024 오픈 코어 파일, gdb a.out 코어 디버깅 중
  • set var 디버깅에서 변수 값을 설정합니다 (예 : n = 10) set var n = 100

둘째, gdb 디버깅 모드

  • gdb 디버그 모드
  • 전속력으로 달리다
  • 단일 단계 디버깅 시작
  • 후속 포크 모드 자식 / 부모 설정 #Makefile 프로젝트 관리 추적 자식 프로세스 및 부모 프로세스

세, Makfile 프로젝트 관리

  • 프로젝트 코드 컴파일 관리
  • 컴파일 프로젝트 시간 절약
  • 한 번 작성된 평생 혜택

운영 예제 파일 : add.c sub.c mul.c dive.c main.c

기본 원칙
세 가지 요소 : 목표, 조건 및 순서.

넷째, Makefile의 작동 원리

  1. 각 목표와 종속성 간의 관계 분석
  2. 종속성에 따라 아래에서 위로 명령 실행
  3. 대상보다 최신 수정 시간을 기준으로 업데이트를 결정합니다.

대상이 조건에 의존하지 않는 경우 해당 명령을 실행하여 업데이트를 표시합니다.
깨끗한

  • 목적 : 컴파일로 생성 된 중간 o 파일과 최종 대상 파일을 지 웁니다.
  • make clean 현재 디렉터리에 같은 이름의 clean 파일이 있으면 clean에 해당하는 명령이 실행되지 않습니다.
  • 잘못된 대상 문 : .PHONY : clean
  • clean 명령의 특수 기호

"-"이 명령은 잘못되었습니다. make는 계속해서 후속 명령을 실행합니다. 예 : "-rm main.o"
"@"는 명령 자체가 아니라 결과 만 표시합니다. 예 : "@echo"clean done ""

다른

-make默认执行第一个出现的目标,可通过make dst指定要执行的目标
-distclean目标
-install目标
-make -C指定目录 进入指定目录,调用里面的Makefile

다섯, 간단히 MakeFile 사용

python @ ubuntu : ~ / linuxC / calc $ cat Makefile
target : dependent (condition) command
phase one

#app:add.c sub.c dive.c mul.c main.c
#gcc add.c sub.c dive.c mul.c main.c -o app

2 단계

#app:add.o sub.o dive.o mul.o main.o
#gcc add.o sub.o dive.o mul.o main.o -o app
#add.o:add.c
#gcc -c add.c
#sub.o:sub.c
#gcc -c sub.c
#dive.o:dive.c
#gcc -c dive.c
#mul.o:mul.c
#gcc -c mul.c
#main.o:main.c
#gcc -c main.c

3 단계

#$@表示目标,$^表示所有依赖,$<表示依赖中的第一个
#obj=add.o sub.o mul.o dive.o main.o
#src = $(wildcard *.c)
#obj = $(patsubst %.c,%.o,$(src))
#target = app
#$(target):$(obj)
#gcc $^ -o $@
#%.o:%.c
#gcc -c $< -o $@

4 단계

CPPFLAGS= -Iinclude
CFLAGS= -g -Wall
LDFLAGS=
CC=gcc
#CC=arm-linux-gcc
src = $(wildcard *.c)
obj = $(patsubst %.c,%.o,$(src))
target = app
$(target):$(obj)
$(CC) $^ $(LDFLAGS) -o $@
%.o:%.c
    $(CC) -c $< $(CFLAGS) $(CPPFLAGS) -o $@
.PHONY:clean
#彻底清除生生过程文件
clean:
    -rm -f *.o
    -rm -f app
#彻底清除生生过程文件和生成配置文件
distclean: rm /usr/bin/app
install:cp app /usr/bin
test:
    @echo $(src)
    @echo $(obj)

여기에 사진 설명 삽입

여기에 사진 설명 삽입

추천

출처blog.csdn.net/m0_50662680/article/details/110232731