LINUX.ORG.RU

Вопрос про ptrace/SIGTRAP


0

0

Господа, я занимаюсь поделкой некоего подобия отладчика, и наткнулся
на одну неприятную проблему. Отлаживается многопотоковое приложение.
События типа breakpoint-ов и сигналов ловяться с помощью ptrace. Все
вроде бы прекрасно работает, но иногда вдруг в одном из потоков
отлаживаемого приложения случается сигнал SIGTRAP, и все мои проверки
на тип события проваливаются - SIGTRAP вызван не breakpoint-ом и не
каким-то сигналом. Процесс этот останавливается всгда в одном и том
же месте, а именно - в функции __pthread_sigsuspend. Код там такой:

libpthread.so$.__pthread_sigsuspend:
     4002FA20  push      ebp
     4002FA21  mov       ebp, esp
     4002FA23  mov       eax, dword ptr [ebp+08H]
     4002FA26  mov       ecx, 000000008H
     4002FA2B  push      ebx
     4002FA2C  mov       ebx, eax
     4002FA2E  mov       eax, 0000000B3H
---> 4002FA33  int       0FFFFFF80H
     4002FA35  pop       ebx
     4002FA36  pop       ebp
     4002FA37  ret

Стоп происходит в месте, отмеченном "--->".

Системный вызов с номером 0xb3 == 179 - это rt_sigsuspend.
Вот собственно и вопрос - почему rt_sigsuspend генерирует SIGTRAP?
Причем не под отладчиком никакого SIGTRAP никогда не летит, прилада
прекрасно работает.

Если этот сигнал просто проигнорировать, не отдавая процессу,
отлаживаемая программа повисает. Если отдать, то соответствующий
поток умрет и так же все накроется. Получается безвыходное положение,
так что нужно понять, отчего возникает этот сигнал.

Может быть, кто-нибудь занимался чем-то подобным? Буду весьма
благодарен за любую помощь.

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.