GDB가 중단 점 목록을 저장하도록하기 때로는 디버깅 세션에서 테스트를 위해 일련의

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로 성공적으로 테스트했습니다 .


답변

아마도 이것 :

save breakpoints [filename]


답변

~ / .gdbinit 에 다음을 넣어 bsavebrestore 를 GDB 명령으로 정의 하여 중단 점을 저장 및 복원하십시오.

define bsave
    save breakpoints ~/.breakpoints
end

define brestore
   source ~/.breakpoints
end