2015-12-03 26 views
11

Uso Android Studio per eseguire il debug di un'app NativeActivity scritta in C++
Nel mio codice C++ la prima cosa che faccio in android_main() è attendere 10 secondi per il debugger da allegare. Nella finestra 'debug' Vedo:SIG33 durante il debug di Android nativo

Now Launching Native Debug Session 

e poi dopo pochi secondi

Debugger attached to process 28458 

e poi a destra dopo che attribuisce, il debugger viene arrestato con un segnale:

Signal: 33 (signal SIG33) 

Premendo 'Riprendi programma' e poi ottengo lo stesso segnale ancora e ancora per 7-8 volte. Successivamente, il programma continua come previsto, debugger allegato e sono in grado di fermarlo ai punti di interruzione.

Qual è il significato di questo SIG33? come posso prevenirlo?

+0

quale versione di Android Studio stai usando? – wizurd

+0

Android studio 1.3.1, NDK 10e – shoosh

+1

Solo un'idea: il segnale 33 può essere inteso per il programma e il debugger deve passarlo. So come farlo con gdb ('handle SIG33 nostop noprint noignore pass') ma non con il debugger di Android Studio; spero che sia d'aiuto. – YSC

risposta

5

Il segnale 33 è utilizzato internamente da Bionic per le strutture di backtrace.

Vedere comment in __libc_current_sigrtmin.cpp.

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

Vedere la definizione di __SIGRTMIN per generic, arm, x86, e mips.

#define __SIGRTMIN 32 

Penso che SIG33 sia causato da gdb e gdb non lo ignora correttamente.

+0

Interessante. Sto usando lldb, non gdb ma immagino che lldb funzioni allo stesso modo e questo accade solo all'inizio quando lldb è appena collegato al processo. Qualche idea sul perché non l'ignorerebbe? – shoosh

+0

quale versione di lldb stai usando? Probabilmente non lo ignora a causa di un bug o è compilato per un'altra variante di Linux. – programmerjake

1

SIG33 viene utilizzato per segnalare "librerie di thread" da LLDB.

Estratto da fonte LLDB:

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

ma non mi sembra di capire il motivo per cui il codice è sempre presente. Potrebbe essere dovuto ad alcuni problemi di dipendenza minori.