문제

gdb 또는 dbx와 같은 디버거를 실행하는 동안 가장 까다롭고 유용한 명령을 게시할 수 있습니까?

도움이 되었습니까?

해결책

  1. 뒤에서 가득 차: 로컬 변수와 함께 백 트레이스를 완료하십시오
  2. 위로, 아래에, 액자: 프레임을 통해 움직입니다
  3. 보다: 특정 조건이 충족되면 프로세스를 중단
  4. 예쁜 인쇄를 설정하십시오: prints printly 형식 C 소스 코드
  5. 로깅을 설정하십시오: 지원을 위해 다른 사람들에게 표시하기위한 로그 디버깅 세션
  6. 인쇄 배열을 설정하십시오: 예쁜 배열 인쇄
  7. 마치다: 기능이 끝날 때까지 계속하십시오
  8. ~할 수 있게 하다 그리고 장애를 입히다: 브레이크 포인트를 활성화/비활성화합니다
  9. tbreak: 한 번 끊은 다음 중단 점을 제거하십시오
  10. 어디: 현재 실행중인 줄 번호
  11. 정보 현지인: 모든 로컬 변수를보십시오
  12. 정보 args: 모든 기능 인수를보십시오
  13. 목록: 소스보기
  14. rbreak: 정규 표현식과 일치하는 기능을 중단합니다

다른 팁

텍스트 사용자 인터페이스로 GDB를 시작하십시오

gdb -tui

GDB 7.0에서 시작하여 있습니다 가역적 디버깅, 새로운 가장 좋아하는 명령은 다음과 같습니다.

* reverse-continue ('rc') -- Continue program being debugged but run it in reverse
* reverse-finish -- Execute backward until just before the selected stack frame is called
* reverse-next ('rn') -- Step program backward, proceeding through subroutine calls.
* reverse-nexti ('rni') -- Step backward one instruction, but proceed through called subroutines.
* reverse-step ('rs') -- Step program backward until it reaches the beginning of a previous source line
* reverse-stepi -- Step backward exactly one instruction
* set exec-direction (forward/reverse) -- Set direction of execution.

"-tui"param으로 GDB를 시작하는 대신 "wh"를 입력하여 잠시 후 텍스트 모드로 전환 할 수도 있습니다.

thread apply all bt 또는 thread apply all print $pc: 모든 스레드가 무엇을하고 있는지 신속하게 찾아야합니다.

예를 들어 매크로가 정의되었습니다 stl-views.gdb

사용 -command=<file with gdb commands> GDB를 발사하는 동안 옵션. 동일 -x <command file>. 이 명령 파일에는 브레이크 포인트, 옵션 등과 같은 GDB 명령이 포함될 수 있습니다. 특정 실행 파일을 GDB를 사용하여 연속 디버그 실행을 통해 넣어야하는 경우 유용합니다.

GDB를 스크립팅하는 것은 좋은 속임수입니다. 제 스케줄러 잠금을 좋아하는 것 외에는 다른 스레드의 실행을 방지하기 위해 세트 스케줄러 잠금을 좋아합니다.

프로그램에서 실행 코드 라인이 있는 위치를 강조 표시하는 화면이 포함된 하위 프로세스를 보기 위해 -tui 옵션으로 gdb를 시작하는 대신 C-x o 및 C-x a를 사용하여 이 기능에 뛰어들고 빠져나옵니다.이는 기능을 사용 중이고 일시적으로 사용하지 않을 경우에 유용하므로 위쪽 화살표를 사용하여 이전 명령을 가져올 수 있습니다.

  • 사용 .gdbinit (매크로를 작성하고 GDB에서 전화 할 수있는 파일을 시작하십시오). gdb가로드 될 때마다 픽업되도록 홈 디렉토리에있는 .gdbinit.
  • 정보 스레드 모든 활성 스레드를 나열하려면 f ( #) -> # 스레드 번호를 전환하려는 스레드 번호

  • 때때로 나는 GDB를 사용하여 16 진수에서 10 진수 또는 이진으로 변환합니다. 계산기를 열지 않고 매우 편리합니다.

    • p/d 0x10-> 10 진수에 40110을 제공합니다.
    • p/t 0x10-> 이진이 0x10에 해당합니다.
    • P/x 256-> 16 진수량 256

이것은 유용 할 수 있습니다.하지만 개선 될 수 있다고 확신합니다.

define mallocinfo
  set $__f = fopen("/dev/tty", "w")
  call malloc_info(0, $__f)
  call fclose($__f)

STL을 디버그하려면 .gdbinit에 컨텐츠를 추가하고 다음과 같은 지침을 따르십시오.

http://www.yolinux.com/tutorials/gdb-commands.html#stlderef

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top