하나, 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의 작동 원리
- 각 목표와 종속성 간의 관계 분석
- 종속성에 따라 아래에서 위로 명령 실행
- 대상보다 최신 수정 시간을 기준으로 업데이트를 결정합니다.
대상이 조건에 의존하지 않는 경우 해당 명령을 실행하여 업데이트를 표시합니다.
깨끗한
- 목적 : 컴파일로 생성 된 중간 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)