OK, 정보 휴식 을 나열 브레이크 포인트가 아니라 –command을 사용하여 재사용와 함께 잘 작동 형식으로 이 문제로 . GDB에 다시 입력 할 수있는 파일로 덤프하는 방법이 있습니까? 때로는 디버깅 세션에서 테스트를 위해 일련의 중단 점을 작성한 후 GDB를 다시 시작해야합니다.
.gdbinit 파일은 –command와 같은 문제가 있습니다. 정보 나누기 명령은 오히려 인간의 소비를위한 테이블을 명령을 나열하지만,하지 않습니다.
자세한 내용은 info break 의 샘플입니다 .
(gdb) 정보 나누기 숫자 유형 Disp Enb 주소 1 중단 점 유지 y 0x08048517 <foo :: bar (void) +7>
답변
GDB 7.2 (2011-08-23)부터는 이제 break breaks 명령을 사용할 수 있습니다 .
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.
source <filename>
파일에서 저장된 중단 점을 복원하는 데 사용 합니다.
답변
이 답변은 구식입니다. 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
breaks.txt 파일에는 다음이 포함됩니다.
Num Type Disp Enb Address What
1 breakpoint keep y 0x08049329 <main+16>
.gdbinit
또는 --command
파일에 유용한 형식으로 변환하는 AWK 스크립트 작성 이 쉽습니다. 또는 스크립트 --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
답변
프롬프트 에서 입력하는 것처럼 GDB 명령과 중단 점을 .gdbinit 파일 에 넣으면 gdb>
시작시 GDB가 자동으로로드하고 실행합니다. 이것은 디렉토리 별 파일이므로 프로젝트마다 다른 파일을 가질 수 있습니다.
답변
Johannes의 답변에 대한 anon의 확장 에 대한 확장 :
.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
.
답변
Johannes의 답변 확장 : 출력을 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로 성공적으로 테스트했습니다 .
답변
아마도 이것 :
답변
~ / .gdbinit 에 다음을 넣어 bsave 및 brestore 를 GDB 명령으로 정의 하여 중단 점을 저장 및 복원하십시오.
define bsave
save breakpoints ~/.breakpoints
end
define brestore
source ~/.breakpoints
end