2011-11-02 3 views
1

나는 시그널과 sighandlers를 곧 사용할 프로젝트를 가지고있다. 그러나 나는 한 부분에 매달렸다. 여기에 선생님의 프롬프트에서 붙여 넣은 부분은 "... 디버그 모드가 현재 경우가 디버그 모드, 예를 들면 오프에 또는 밖으로 전환해야 SIGUSR2가 수신하면"이 오프 디버깅 설정해야 "디버그 인 경우, "OFF"는 디버깅을 설정해야합니다.내 프로그램에서 디버그 모드를 전환하려면 어떻게합니까?

을 "의"디버깅 할 때, 당신의 프로그램이 총 매 x 초를보고하고 SIGUSR1을 무시해야합니다. 를 "OFF"알람이 켜져 있고 프로그램되어야한다 디버깅 할 때 은 이전처럼 sigusr1을 처리해야합니다 (즉, 의 상태에 대한 보고서). "

정확히 그는 디버그 모드로 전환하여 무엇을 의미 하는가? 유일한 익숙한 디버그 모드는 Eclipse 버전입니다. 또 다른 급우에게 물어 보니, 내 자신의 디버그 모드를 구축한다고 가정 한 응답을 받았고, 이것이 무엇을 의미하는지 확신 할 수 없었습니다. 누구든지 어떤 빛을 비추고 올바른 방향으로 향하게 할 수 있습니까? 읽어 주셔서 감사 드리며 사전에 도움을 주셔서 감사합니다!

+1

강사가받은 답변은 무엇입니까? * 당신의 과제에 대한 모든 질문을 먼저해야하는 곳입니다. –

+0

아 물론.=) 예, 오늘 정오 경에 연락했지만 응답이 없었습니다 (이메일). 불행히도 기한은 오후 11시입니다 – Derek

+0

도움을 주신 모든 분들께 감사드립니다. – Derek

답변

2

잠시 "디버그"를 잊어 버리고 프로그램에 두 개의 모드가 필요하다고 생각하십시오.. 한 모드에서는 특정 방식으로 작동해야하고 다른 모드에서는 다른 방식으로 작동합니다. 두 가지 상태의 트랙을 유지하는 쉬운 방법은

무엇입니까? bool과 같이 가능한 두 개 이상의 값이있는 변수입니다. 그래서 당신은 하나 개의 모드 또는 기타에있어 여부를 추적 유지하는 전역 변수 선언 (그러나 기술적으로 지원하지 않는 신호 처리기에서 글로벌 bool 변수를 사용하여 이후를 대신 sig_atomic_t 사용) :

sig_atomic_t in_debug_mode; 

때 프로그램이 어느 모드에 있어야 하는지를 제어하는 ​​신호를 받고, 변수의 값을 변경 한 다음 프로그램이 해당 모드와 일치하는 방식으로 작동하는지 확인하십시오. 당신은 신호를 수신하고 디버그 모드에 있지라면, 다음, in_debug_mode = true을 설정하여 SIGALRM 핸들러를 설정하고 SIGUSR1 핸들러를 해제합니다. 디버그 모드에서 인 경우 in_debug_mode = false을 설정하고 SIGALRM 처리기를 지우고 SIGUSR1 처리기를 설정하십시오. 모드의

이름는 무관하다. 할당의 목적으로 "디버그 모드"라고 부르지 만 익숙한 다른 프로그램의 디버깅 기능과는 아무런 관련이 없습니다.

+0

하지만 이것은 정의되지 않은 동작이라고 생각합니다. 시그널 핸들러 내에서만'sigatomic_t '를 수정할 수 있습니다. –

3

그것은 단순히 프로그램과 같이, 디버그 레벨에 대한 몇 가지 상태 정보를 유지한다는 것을 의미 : 그럼 당신은 당신의 프로그램에서 같은 log("starting loop"); 또는 무언가를 말할 수

int debug_level = 0; 

void log(const char * message) 
{ 
    if (debug_level > 0) 
    { 
    printf("Debug message: %s\n", message); 
    } 
} 

, 그리고 그것은 단지 경우 인쇄됩니다 디버그 수준이 충분히 높습니다.

당신이 신호 핸들러를 등록

, 당신은 단순히 글로벌 debug_level 변수를 수정할 수 있습니다. (변수에 대해서만 sigatomic_t을 사용하여 신호 처리기 내에서 안전하게 수정할 수 있는지 확인하십시오!)

+0

그래, debug_level은 어떻게 업데이트 되나요? 여기에서 프로그램의 외부에서 무언가를 수정하지 않으면 0에 머무르게됩니다. =) – Derek

+1

교수님은 이것이 SIGUSR2 신호를 통해 어떻게 업데이트 될지 말씀하셨습니다. 비트를 토글하는 신호 처리기 (Kerrek가 말한대로)를 작성합니다. http://stackoverflow.com/questions/5473645/signal-handler-question – Matt

+0

@Derek : 신호 처리기 작성에 도움이 필요합니까? 귀하의 질문에, 또는 오히려, "C에서 신호 처리기를 작성하려면 어떻게해야합니까?"라는 질문을해야합니다. –

관련 문제