새소식

Programming/gcc

[GDB] handle 명령

  • -

gdb 프로세스에 발생되는 신호(signal)를 다루기 위한 기능입니다.

handle 신호 동작

명령 형태는 위와 같습니다. 예를 들면 SIGUSR1 신호가 발생하면 기본 동작으로 멈추는데 멈추지 않고 계속 진행하게 하려면 다음과 같이 입력합니다.

handle SIGUSR1 nostop

동작에는 stop, nostop, print, noprint, pass, nopass, ignore, noignore가 올 수 있습니다.

크게 stop, print, pass, ignore입니다.

stop은 해당 신호를 받았을 때 프로그램 진행을 멈추고 디버거인 gdb 프롬프트로 돌아올 것인지를 지정합니다.

print는 해당 신호가 발생했음을 간단히 출력해줍니다.

pass는 해당 신호를 프로그램에 전달할지를 지정합니다.

ignore는 해당 신호를 무시할지 지정합니다. ignore는 nopass와 같은 동작을 합니다. noignore는 pass와 같은 동작을 합니다. 기본적으로 대부분의 신호는 stop, print, pass가 지정되어 있습니다. SIGSTOP, SIGKILL 신호는 캡쳐할 수 없는데 디버거라 그런지 nostop 같은 액션을 지정할 수 있네요.

신호는 SIGINT, SIGQUIT, SIGTRAP, SIGABRT, SIGFPE, SIGSEGV, SIGPIPE, SIGTERM, SIGUSR1, SIGUSR2 등의 이름을 직접 주거나 시그널 번호를 줄 수 있습니다. 시그널은 1-31까지 있지만 시그널 번호를 handle 명령에서 사용하려면 하위 호환을 위해서 1-15까지만 숫자로 줄 수 있다고 합니다. handle 신호 까지만 주면 현재 상태를 알려줍니다. 동작을 지정해도 바뀐 결과를 알려줍니다.




참조: http://man7.org/linux/man-pages/man7/signal.7.html

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.