2013-02-28 4 views
22

Zajmuję się tworzeniem aplikacji, którą rodzic prosi dziecko o obsługę określonych zadań. Występuje problem polegający na tym, że skonfigurowałem gdb do podążania za potomkiem, ale po rozwidleniu, po osiągnięciu punktu przerwania wysyła on SIGTRAP, ale dziecko w jakiś sposób kończy działanie i wysyła SIGCHLD do rodzica.gdb debugowanie procesu potomnego po rozwidleniu (skonfigurowane dziecko podążające za widżetem)

Skonfigurowałem skonfigurowałem przed rejestracją signal(SIGTRAP, SIG_IGN), więc rozumiem, że dziecko powinno dziedziczyć i ignorować SIGTRAP po osiągnięciu punktu przerwania, ale tak się nie dzieje.

Proszę mi pomóc zrozumieć, jeśli jestem niepoprawny.

Jak mogę skutecznie debugować proces potomny?

+2

„* ... po osiągnięciu punktu przerwania, wysyła SIGTRAP ... *” to sposób debugger jest powiadamiany o zerwaniu. "* ... dziecko jakoś się kończy ... *" kończy się normalnie lub nienormalnie? Możesz użyć 'WIFEXITED (status)' na wartości zwróconej przez 'wait [...] ([...,] & status [, ...])' w rodzica, aby to sprawdzić. Zobacz 'man 3 wait', aby poznać szczegóły. – alk

Odpowiedz

59

Proces potomny dziedziczy programy obsługi sygnałów od rodzica, ale nie oczekuje na sygnał.

Po rozwidleniu spróbuj zainstalować moduł obsługi sygnału dla SIGTRAP w miejscu kodu, w którym proces potomny jest wykonywany po rozwidleniu. Jeśli nie poradzisz sobie z SIGTRAP, domyślną akcją jest to, że dziecko jest zakończone.

Jeśli chcesz debugować proces potomny, musisz użyć follow-fork-mode. Musisz ustawić tryb używając

set follow-fork-mode child 

Jednak teraz tylko dziecko może być błędów, a rodzic uruchamia zaznaczone.

Istnieje inny brudny sposób debugowania procesu potomnego.

Po wykonaniu fork(), należy umieścić wywołanie sleep() w kodzie, w którym wykonuje się dziecko, pobrać identyfikator PID dziecka za pomocą narzędzia ps, a następnie dołączyć PID.

attach <PID of child process> 

Teraz można debugować proces dziecko, jak każdy inny proces.

Po debugowania, można odłączyć PID używając

detach 
Powiązane problemy