2011-01-30 3 views
1

전 tmux 세션에서 gdb 내부의 전경 모드로 데몬 응용 프로그램을 디버깅합니다. 이 데몬은 때때로 SIGSEGV와 충돌합니다. 이 충돌의 결과는 외부 세계에 즉시 나타나지 않으므로 데몬이 부서 졌음을 발견하는 데 다소 시간이 걸릴 수 있습니다. 충돌이 일어 났을 때 즉시 어떤 종류의 알림을 받고 싶습니다. 전자 메일도 괜찮습니다. 나는 사람 gdb로부터 도움을 찾지 못했습니다. 어떻게 (만약 그렇다면) 달성 되었습니까? 저렴하고 추악한신호 수신시 외부 알림을 보내려면 어떻게해야합니까?

~ $ gdb --version 
GNU gdb (Gentoo 7.2 p1) 7.2 

답변

0

잠시 후 다시이 문제를 해결 한 것처럼 보입니다. 팁 중 $ _exitcode에 대한 답변 중 하나가 Make gdb quit automatically on successful termination? 인 경우 경로에 나를 올려 놓고 일부 검색 결과가 gdb hooks으로 표시되었습니다.

실험을 마친 후,이 앱의 .gdbinit에 대해 지금 가지고있는 내용입니다. 좋은 점은 시그널을 구별 할 수 있기 때문에 일반 kill 명령은 3 개의 몬스터 (tmux + gdb + app)에서 정상적인 완전한 종료를 제공하는 반면 gdb 쉘에는 아무 것도 출력하지 않고 전자 메일을 펌프 아웃합니다 나를 진단하기 위해 기다려주세요.

set $_exitcode = -999 
set height 0 
handle SIGTERM nostop print pass 
handle SIGPIPE nostop 
define hook-stop 
    if $_exitcode != -999 
     quit 
    else 
     shell echo | mail -s "NOTICE: app has stopped on unhandled signal" root 
    end 
end 
echo .gdbinit: running app\n 
run 
0

뭔가 :

while sleep 30 ; ps auxw | grep progname | grep " t "` && mail -s CRASHED [email protected] < /etc/hostname ; done 

당신이 그것을 한 번만 메일하려는 경우는) 다음 더 많은 작업을 수행 할 수있다. 그러나 당신이 이것을 죽일 때까지 매 30 초마다 이메일이 트릭 일 수 있습니다.

관련 문제