2015-12-03 4 views
11

Я использую Android Studio для отладки приложения NativeActivity, написанного на C++
В моем коде на C++ первое, что я делаю в android_main(), - это ждать 10 секунд для добавления отладчика. В окне «отладки» Я вижу:SIG33 при отладке родного Android

Now Launching Native Debug Session 

, а затем через несколько секунд

Debugger attached to process 28458 

, а затем сразу же после того, как он прикрепляет, отладчик останавливается с сигналом:

Signal: 33 (signal SIG33) 

Я нажимаю 'Resume Program', а затем получаю тот же сигнал снова и снова 7-8 раз. После этого программа будет продолжена, как ожидалось, отладчик прилагается, и я могу остановить его на контрольных точках.

В чем смысл этого SIG33? как я могу это предотвратить?

+0

какая версия Android Studio вы используете? – wizurd

+0

Android studio 1.3.1, NDK 10e – shoosh

+1

Просто идея: сигнал 33 может быть предназначен для программы, и ваш отладчик должен его передать. Я знаю, как это сделать с помощью gdb ('handle SIG33 nostop noprint noignore pass'), но не с отладчиком студии Android; Надеюсь, поможет. – YSC

ответ

5

Сигнал 33 используется для биохимического использования для объектов обратной линии.

См. comment in __libc_current_sigrtmin.cpp.

// POSIX timers use __SIGRTMIN + 0. 
// libbacktrace uses __SIGRTMIN + 1. 
// libcore uses __SIGRTMIN + 2. 

См определение __SIGRTMIN для generic, arm, x86 и mips.

#define __SIGRTMIN 32 

Я думаю, что SIG33 вызван gdb и gdb неправильно игнорирует его.

+0

Интересно. Я использую lldb, а не gdb, но я думаю, что lldb работает одинаково, и это происходит только в самом начале, когда lldb просто привязан к процессу. Любая идея, почему это не будет игнорировать его? – shoosh

+0

какую версию lldb вы используете? Вероятно, это не игнорирует его из-за ошибки или компилируется для другого варианта Linux. – programmerjake

1

SIG33 используется для сообщения о «библиотеках потоков» LLDB.

Отрывок из источника LLDB:

AddSignal (33, "SIG33", false, false, false, "threading library internal signal 2"); 

Но я, кажется, не понять, почему ваш код получает это. Возможно, это связано с некоторыми незначительными проблемами зависимости.

Смежные вопросы