Господа, я занимаюсь поделкой некоего подобия отладчика, и наткнулся на одну неприятную проблему. Отлаживается многопотоковое приложение. События типа 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 никогда не летит, прилада прекрасно работает. Если этот сигнал просто проигнорировать, не отдавая процессу, отлаживаемая программа повисает. Если отдать, то соответствующий поток умрет и так же все накроется. Получается безвыходное положение, так что нужно понять, отчего возникает этот сигнал. Может быть, кто-нибудь занимался чем-то подобным? Буду весьма благодарен за любую помощь.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Отлаживаю кодогенератор (2021)
- Статьи Линукс, ассемблер и X11 (2023)
- Форум ptrace (2008)
- Форум Ptrace + pthread_create (2005)
- Форум Program received signal SIGTRAP (2006)
- Форум ptrace() и сигналы (2018)
- Форум перехват syscalls, ptrace (2007)
- Форум ptrace и сигналы (2003)
- Форум astra-ptrace-lock (2024)
- Форум ptrace и многопоточные процессы (2017)