2014-05-23 2 views
4

가끔 SIGKILL 신호를받는 Ubuntu 10.04 용 C++ 앱을 디버깅하고 있습니다. 나는 을 잡아 신호를 잡아 당겨 실행을 중단하지 못하게하고, 정확한 순간에 앱의 상태에 대한 유용한 정보를 얻을 수 있는지 확인합니다.gdb로 신호 처리하기

gdb documentation 읽기 나는 handle 명령을 발견, 그래서 SIGKILL 신호에 적용하려고 :이 올바르게 이해,

(gdb) handle SIGKILL stop nopass 
Signal  Stop Print Pass to program Description 
SIGKILL  Yes Yes  No    Killed 

그래서 :

stop 
    GDB should stop your program when this signal happens. This implies the print keyword as well. 
print 
    GDB should print a message when this signal happens. 
nopass 
    GDB should not allow your program to see this signal. 

SIGKILL 신호 한 번 gdb이 어떻게 든 그것을 잡아서 메시지를 인쇄하고, 실행을 멈추고, 앱이 스스로를 죽이지 않도록해야합니까?

문제는 이것이 발생하지 않으며 앱이 종료된다는 것입니다.

내가 어떻게 을 잡을 수 있었는지 알 수 있습니까? 신호가 있습니까?

유용한 정보 :

  • 방출되는 신호가 다른 스레드에 을 실행할 때 실행되는 코드의 단편.
  • GDB 버전 : 4.4.3
  • g ++ 버전 : 7.1

답변

5

유닉스에서 신호 (7) 매뉴얼 페이지

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored. 

그래서 디버거가 설정할 수 있습니다 핸들러는 의미가 없습니다. OS는 필요한 조치를 직접 수행합니다. SIGKILL이 응용 프로그램에서 처리 될 수 있다면 OS는 깨진 응용 프로그램을 종료 할 기회가 없습니다. 그 이유로 SIGKILL은 약간 :-)

+0

입니다. 나는 정보를 얻는 다른 방법을 찾아야 할 것이다. 고마워요 @ Klaus, 맨 페이지를 처음부터 확인하고 작업을해야했습니다. –