GDB 에서 알 아야 할 몇 가지 디 버 깅 방법
7,8 년 전에'GDB 로 디 버 깅 프로그램'을 한 편 썼 습 니 다.그래서 그 이후로 많은 친구 들 이 MSN 과 저 에 게 메 일 로 GDB 에 관 한 문 제 를 물 었 습 니 다.지금까지 GDB 에 관 한 문 제 를 물 었 습 니 다.이렇게 여러 해 동안 몇 가지 문 제 는 모두 가 반복 해서 묻 는 것 이다.한편,나 는 나의 이전의 문장 이 명확 하 게 말 하지 못 했 을 수도 있다 고 생각한다.다른 한편,나 는 모두 가 자주 묻 는 문제 가 바로 가장 유용 하 다 고 생각한다.그래서 여기에 나열 해 놓 았 다.보충 해 주시 기 바 랍 니 다.
다 중 스 레 드 디 버 깅
다 중 스 레 드 디 버 깅 은 아마 가장 많이 물 었 을 것 이다.사실 중요 한 것 은 다음 과 같은 몇 가지 명령 이다.
디 버 깅 매크로
이 문 제 는 매우 많다.GDB 에서 매크로 는 미리 컴 파일 되 었 기 때문에 print 매크로 를 정의 할 수 없습니다.그러나 우 리 는 매크로 를 디 버 깅 할 방법 이 있다.이것 은 GCC 의 협조 가 필요 하 다.
GCC 컴 파일 러 에-gdb 3 인 자 를 추가 하면 매크로 를 디 버 깅 할 수 있 습 니 다.
또한,다음 GDB 의 매크로 디 버 깅 명령 을 사용 할 수 있 습 니 다. 관련 매크로 를 살 펴 보 겠 습 니 다.
원본 파일
이 질문 도 많 습 니 다.원본 파일 을 찾 지 못 한 다 는 친구 가 너무 많 습 니 다.여기 서 다음 검 사 를 하 라 고 말씀 드 리 고 싶 습 니 다.
다음은 디 버 깅/bin/ls 의 예제(ubuntu 아래)를 드 립 니 다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ apt-get
source
coreutils
$
sudo
apt-get
install
coreutils-dbgsym
$ gdb
/bin/ls
GNU gdb (GDB) 7.1-ubuntu
(gdb) list main
1192
ls
.c: No such
file
or directory.
in
ls
.c
(gdb) directory ~
/src/coreutils-7
.4
/src/
Source directories searched:
/home/hchen/src/coreutils-7
.4:$cdir:$cwd
(gdb) list main
1192 }
1193 }
1194
1195 int
1196 main (int argc, char **argv)
1197 {
1198 int i;
1199 struct pending *thispend;
1200 int n_files;
1201
조건 단점
조건 단점 [where]if[condition],이런 단점 은 정말 유용 하 다.특히 순환 이나 재 귀 에서 변 수 를 감시 해 야 한다.이 설정 은 GDB 에 있 습 니 다.다만 그 정지점 을 지나 갈 때마다 GDB 가 조건 이 만족 하 는 지 확인 해 줍 니 다.
5.명령 행 매개 변수
때때로,우리 가 디 버 깅 을 해 야 하 는 프로그램 은 명령 행 파라미터 가 있어 야 하 며,많은 친구 들 이 디 버 깅 프로그램의 명령 행 파 라미 터 를 어떻게 설정 해 야 하 는 지 모른다.사실 두 가지 방법 이 있 습 니 다.
gdb 의 변수
때때로 디 버 깅 프로그램 에서 우 리 는 실행 중인 변수 만 보 는 것 이 아니 라 프로그램의 변 수 를 직접 설정 하여 테스트 에서 발생 하기 어 려 운 상황 을 모 의 하고 오류 나 switch 의 분기 문 구 를 비교 할 수 있 습 니 다.set 명령 을 사용 하면 프로그램의 변 수 를 수정 할 수 있 습 니 다.
그리고 gdb 에 도 변수 가 있 을 수 있다 는 것 을 아 십 니까?셸 처럼 gdb 의 변 수 는$로 시작 합 니 다.예 를 들 어 배열 의 모든 요 소 를 인쇄 하려 면 이렇게 할 수 있 습 니 다.
1
2
3
4
5
(gdb)
set
$i = 0
(gdb) p a[$i++]
...
#
물론 프로그램의 변수 와 gdb 의 변 수 는 상호작용 을 할 수 있 음 을 나타 내 는 예시 일 뿐이다.
명령
아마도,당신 은 p 명령 을 사용 하 는 것 을 매우 좋아 할 것 입 니 다.따라서 변수 이름 을 모 를 때 당황 할 수 있 습 니 다.p 명령 은 항상 변수 이름 이 필요 하기 때 문 입 니 다.x 명령 은 메모 리 를 보 는 데 사 용 됩 니 다.gdb 에서"help x"는 도움말 을 볼 수 있 습 니 다.
x/10i $ip-20 ($ip )
어떤 친구 들 이 나 에 게 어떻게 자동화 디 버 깅 을 하 느 냐 고 물 었 다.여기 서 command 명령 을 소개 합 니 다.간단하게 이해 해 보 세 요.gdb 명령 을 포장 하 는 것 입 니 다.약간 워드 프로세서 의'매크로'와 같 습 니 다.다음은 예시 입 니 다.
1
2
3
4
5
6
7
8
9
10
(gdb)
break
func
Breakpoint 1 at 0x3475678:
file
test
.c, line 12.
(gdb)
command
1
Type commands
for
when breakpoint 1 is hit, one per line.
End with a line saying just
"end"
.
>print arg1
>print arg2
>print arg3
>end
(gdb)
우리 의 정지점 이 도 착 했 을 때,command 의 세 명령 을 자동 으로 실행 하고,func 의 세 개의 매개 변수 값 을 출력 합 니 다.
(전문 완료)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.