Я интегрировал Google-Breakpad в моем приложении на C++. Теперь я намеренно сбой приложения, но он зависает в моей системе Ubuntu i686. Я должен положить printf
всюду в Breakpad, чтобы проверить, где именно он висит. Итак, в breakpad создается дочерний процесс клона и в этом процессе ptrace(PTRACE_ATTACH, pid, NULL, NULL)
, за которым следует waitpid(pid, NULL, __WALL)
Syscall вызывается в каждом потоке. С одним конкретным потоком waitpid входит в бесконечное состояние ожидания, и я тогда должен умышленно убить приложение.waitpid в состоянии ожидания infutine после PTRACE_ATTACH
Кто-нибудь знает, почему именно это происходит? Почему с этим одним конкретным потоком waitpid()
идет в состоянии ожидания infinte? Есть ли решение для того же?
Спасибо.
Вы должны предоставить дополнительную информацию. Непонятно, о чем вы спрашиваете. Я думаю, что форумы поддержки брейк-площадок - лучшее место, чтобы задать этот вопрос. –
Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что он слишком широк для переполнения стека и действительно принадлежит к форумам поддержки break-pad. –
@ShacharShemesh Я уже задал вопрос на форуме breakpad (https://groups.google.com/forum/#!topic/google-breakpad-discuss/2Ajlsnvkjpw). И я думаю, что я дал всю необходимую информацию. Просто рассматривайте это как обычную проблему без предметной области. Мне просто нужно знать, в чем причина того, что 'waitpid' переходит в бесконечное состояние ожидания после' ptrace (PTRACE_ATTACH ..) 'вызывает один конкретный поток? Не похоже, чтобы никто не использовал ptrace и waitpid комбинацию. – Arpit