>

중단 점이없는 GDB 실행을 어떻게 중지합니까?

  • 답변 # 1

    정상적인 인터럽트Ctrl-c를 사용하면 정상적으로 작동합니다. GDB는 단지 SIGINT 를 전달합니다  그런 다음 죽는 디버깅 프로세스에. GDB는 비표준 종료를 포착하고 프로세스를 중단하므로 모든 스레드, 스택 및 변수의 현재 값을 계속 확인할 수 있습니다. 중단 점을 사용하는 것이 더 나을지라도 잘 작동합니다. 내가 이런 일을하는 유일한 길은, 내가 어떤 종류의 무한 루프에 들어간 것 같다면.

  • 답변 # 2

    GUI 응용 프로그램은 ^ C와 ^ 콘솔 응용 프로그램에 반응하지 않습니다. 요즘 대부분의 사소한 프로젝트는 GUI 응용 프로그램이나 GUI 응용 프로그램에서 주로 사용되는 라이브러리 인 경향이 있으므로 두 가지 옵션이 있습니다 :

    <올>

    별도의 터미널에서 SIGSTOP을 응용 프로그램으로 보냅니다. 귀찮습니다.

    GDB 프롬프트에서 ^ C 또는 ^ Break를 누르면 GDB는 종료되지만 응용 프로그램은 계속 실행됩니다. 그런 다음 -p 를 사용하여 GDB를 다시 실행하여 연결할 수 있습니다.  명령 줄 스위치. 디버거 상태가 손실됩니다.

    두 경우 모두 tasklist | grep 가 도움이 될 것입니다. ProcessName | sed -e 's/ ProcessName *\([0-9]*\).*/gdb ModuleName -pid=\1/' > rungdb.sh  쉘 스크립트, makefile에서 사용하거나 GDB를 첨부하는 대신 신호를 보내도록 수정할 수 있습니다.

    info threads  보고 싶은 스레드를 파악하는 데 도움이됩니다. 그런 다음 thread 를 사용하십시오. ThreadNumber 스위치로 전환하십시오.

  • 답변 # 3

    쉘을 시작하고 ps를 사용하여 프로세스 ID를 찾은 다음 kill 명령을 사용하여 SIGSTOP 또는 SIGINT를 보내십시오 (예 : kill -INT pid).

  • 답변 # 4

    인수없이 BREAK 만 입력하세요.

    Break는 인수없이 호출 될 때 break가 선택된 스택 프레임에서 실행될 다음 명령어에서 중단 점을 설정합니다

  • 답변 # 5

    Ctrl + Z는 저에게 효과적입니다 (그러나 일부 경우에만- 왜 그런지 모르겠습니다).

  • 이전 c++ - qglwidget - qpainter로 오버 페인팅
  • 다음 ajax - Laravel Blade에서 ID를 JQuery URL로 전달하는 방법