2015-12-03 6 views
11

Ich benutze Android Studio zum Debuggen einer in C++ geschriebenen NativeActivity-App. In meinem C++ Code ist die erste Sache, die ich in android_main() mache, 10 Sekunden für den Debugger zu warten. Im Fenster 'Debug' Ich sehe:SIG33 beim Debuggen von nativem Android

Now Launching Native Debug Session 

und dann nach einigen Sekunden

Debugger attached to process 28458 

und dann nach rechts, nachdem er misst, wird der Debugger mit einem Signal gestoppt:

Signal: 33 (signal SIG33) 

Ich drücke 'Resume Program' und dann bekomme ich immer wieder das gleiche Signal für 7-8 mal. Danach läuft das Programm wie erwartet, Debugger angeschlossen und ich kann es an Haltepunkten stoppen.

Was bedeutet dieses SIG33? Wie kann ich das verhindern?

+0

Welche Version von Android Studio verwenden Sie? – wizurd

+0

Android Studio 1.3.1, NDK 10e – shoosh

+1

Nur eine Idee: das Signal 33 könnte für das Programm bestimmt sein, und Ihr Debugger sollte es weitergeben. Ich weiß, wie man das mit gdb macht ('handle SIG33 nostop noprint noignore pass'), aber nicht mit dem Android Studio Debugger; ich hoffe es hilft. – YSC

Antwort

5

Das Signal 33 wird intern von bionic für die Backtrace-Funktionen verwendet.

Siehe comment in __libc_current_sigrtmin.cpp.

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

Siehe Definition von __SIGRTMIN für generic, arm, x86 und mips.

Ich denke, dass SIG33 von gdb verursacht wird und gdb es nicht korrekt ignoriert.

+0

Interessant. Ich benutze lldb, nicht gdb, aber ich denke, lldb funktioniert auf die gleiche Weise und das passiert nur am Anfang, wenn lldb nur an den Prozess angehängt. Irgendeine Idee, warum es es nicht ignorieren würde? – shoosh

+0

Welche Version von lldb verwenden Sie? Es wird wahrscheinlich nicht wegen eines Fehlers ignoriert oder es ist für eine andere Linux-Variante kompiliert. – programmerjake

1

SIG33 wird verwendet, um über "threading libraries" von LLDB zu signalisieren.

Auszug aus LLDB Quelle:

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

Aber ich scheine nicht, den Grund zu verstehen, warum Ihr Code diese erhält. Möglicherweise aufgrund geringfügiger Abhängigkeitsprobleme.