중단점 목록을 저장하도록 GDB 가져오기
그래, 정보 중단은 중단점을 나열하지만, 이 질문에서처럼 --command를 사용하여 중단점을 재사용하는 형식은 아니다.GDB는 그것들을 다시 입력할 수 있는 파일에 버리는 방법을 가지고 있는가?때로는 디버깅 세션에서 테스트를 위한 중단점 집합을 쌓은 후 GDB를 재시작해야 한다.
.gdbinit 파일에는 --command와 같은 문제가 있다.info break 명령은 명령을 나열하는 것이 아니라 사람이 소비하는 표를 나열한다.
자세한 내용은 정보 단절의 샘플을 참조하십시오.
(gdb) 정보 중단Num Type Disp Enb 주소 내용1 브레이크포인트 keep y 0x08048517 <foo::bar(bar)+7>
GDB 7.2(2011-08-23)부터는 중단점 저장 명령을 사용할 수 있다.
save breakpoints <filename>
Save all current breakpoint definitions to a file suitable for use
in a later debugging session. To read the saved breakpoint
definitions, use the `source' command.
파일에서 저장된 중단점을 복원하는 데 사용하십시오.
bsave 및 brestore를 GDB 명령으로 정의하여 중단점을 저장 및 복원하려면 ~/.gdbinit에 다음을 넣으십시오.
define bsave
save breakpoints ~/.breakpoints
end
define brestore
source ~/.breakpoints
end
나는 이전의 답변에 다음과 같은 추가가 특정 파일에 중단점을 저장/로드하는 데 유용하다는 것을 알았다.
- 중단점 저장: bsave {filename}
- 로드 중단점: {filename}을(를) 확대
이전 답변과 같이 ~/.gdbinit 파일에 다음 코드를 추가하십시오.
# Save breakpoints to a file
define bsave
if $argc != 1
help bsave
else
save breakpoints $arg0
end
end
document bsave
Saves all current defined breakpoints to the defined file in the PWD
Usage: bsave <filename>
end
# Loads breakpoints from a file
define bload
if $argc != 1
help bload
else
source $arg0
end
end
document bload
Loads all breakpoints from the defined file in the PWD
Usage: bload <filename>
end
이 대답은 시대에 뒤떨어져 있다.이제 GDB는 직접 저장을 지원한다.이 대답을 보십시오.
로깅을 사용할 수 있음:
(gdb) b main
Breakpoint 1 at 0x8049329
(gdb) info break
Num Type Disp Enb Address What
1 breakpoint keep y 0x08049329 <main+16>
(gdb) set logging file breaks.txt
(gdb) set logging on
Copying output to breaks.txt.
(gdb) info break
Num Type Disp Enb Address What
1 breakpoint keep y 0x08049329 <main+16>
(gdb) q
파일이 깨지다.txt에 포함되는 항목:
Num Type Disp Enb Address What
1 breakpoint keep y 0x08049329 <main+16>
AWK 스크립트를 작성하여 이를 유용한 형식으로 변환.gdbinit
또는 a--command
파일은 쉽다.아니면 대본을 따로 내보내게 할 수도 있다.--eval-command
의 GDB 명령줄...
.gdbinit에 이 작은 매크로를 추가하면 다음과 같은 작업을 수행할 수 있다.
# Call with dump_breaks file.txt
define dump_breaks
set logging file $arg0
set logging redirect on
set logging on
info breakpoints
set logging off
set logging redirect off
end
.gdbinit:
define bsave
shell rm -f brestore.txt
set logging file brestore.txt
set logging on
info break
set logging off
# Reformat on-the-fly to a valid GDB command file
shell perl -n -e 'print "break $1\n" if /^\d+.+?(\S+)$/g' brestore.txt > brestore.gdb
end
document bsave
store actual breakpoints
end
define brestore
source brestore.gdb
end
document brestore
restore breakpoints saved by bsave
end
와 함께brestore
그런 다음 로 저장된 중단점을 복원할 수 있다.bsave
.
.gdbinit 파일에 GDB 명령과 중단점을 입력할 때와 동일하게 입력하십시오.gdb>
프롬프트가 표시되고, GDB는 시작 시 자동으로 로딩되어 실행된다.이것은 디렉터리별 파일이기 때문에 프로젝트별로 다른 파일을 가질 수 있다.
요하네스로부터의 답변에 대한 확장: 출력을 자동으로 다시 포맷할 수 있음info break
유효한 GDB 명령 파일로:
.gdbinit:
define bsave
shell rm -f brestore.txt
set logging file brestore.txt
set logging on
info break
set logging off
# Reformat on-the-fly to a valid gdb command file
shell perl -n -e 'print "break $1\n" if /^\d+.+?(\S+)$/g' brestore.txt > brestore.gdb
end
document bsave
store actual breakpoints
end
그 후에 유효한 명령 파일이brestore.gdb
.
이것은 지원서를 컴파일할 때 나에게 효과가 있었다.-g
.
또한 우분투 9.10 (Karmic Koala)에서 GDB v6.8로 성공적으로 시험해 보았다.
아마도 이것은 다음과 같다.
경고: 현재 출력 프로토콜이 리디렉션을 지원하지 않음
나는 또한 TUI 모드에서 로깅을 활성화하려고 할 때 GDB에서 이 오류/경고를 받는다.그러나 "비 TUI" 모드에서는 로깅이 작동하는 것 같다.그래서 나는 어떤 것을 기록할 때마다 TUI 모드를 떠난다. (+ , + )와 함께 TUI 모드로 앞뒤로 이동한다.
내 작업 방식:
- GDB 시작(정상 모드)
- 기록 로펌/사서명사:
set logging on
- 이제 불평해서는 안 된다. - 뒤로/뒤로 TUI 모드로 전환하고 GDB 작업을 수행하십시오.
- (대규모의 역추적 덤프)를 기록하려는 경우 - 일반 모드로 전환
문제는 중단점을 설정하는 것이 상황에 민감하다는 점이다.foo라는 이름의 정적 기능이 두 개 있으면 어떻게 하시겠습니까?
foo를 정의하는 모듈 중 하나를 이미 디버깅하고 있다면 GDB는 당신이 그 모듈을 의미한다고 가정할 것이다.그러나 "break foo"를 파일에 덤프한 다음 시작 시 해당 파일을 읽으면 foo가 어떤 기능을 의미하는지 알 수 없다.
다른 생각 있나요?가지고 있다
warning: Current output protocol does not support redirection
다음에
set logging on
편집:
나는 그 질문이 "파단점 목록을 저장하는 방법"이라는 것을 알고 있지만, 내가 방금 발견한 것은 GDB로 우리는 단순히 "파일에 저장"파단점을 설정할 수 있다는 것이다.
gdb> source breakpoints.txt
어디에breakpoints.txt
다음과 같은 파일:
break main.cpp:25
break engine.cpp:465
break wheel.cpp:57
참조URL: https://stackoverflow.com/questions/501486/getting-gdb-to-save-a-list-of-breakpoints
'Programing' 카테고리의 다른 글
C++ 및 C에서 함수 매개 변수로 'const int' 대 'int const' (0) | 2022.05.08 |
---|---|
Java로 UTF-8 파일을 작성하는 방법? (0) | 2022.05.08 |
라디오 그룹 Vuetify 중앙 집중화 (0) | 2022.05.07 |
Java String - 문자열이 숫자만 포함되고 문자가 포함되지 않는지 확인 (0) | 2022.05.07 |
Vue: 계산된 속성의 초기 트리거링 (0) | 2022.05.07 |