调试本机Android时使用SIG33

SIG33 when debugging native Android

本文关键字:SIG33 本机 Android 调试      更新时间:2023-10-16

我正在使用Android Studio调试用C++编写的NativeActivity应用程序
在我的C++代码中,我在android_main()中做的第一件事就是等待10秒,等待调试器附加。在"调试"窗口中,我看到:

Now Launching Native Debug Session

几秒钟后

Debugger attached to process 28458

然后,在它连接之后,调试器就会停止,并发出一个信号:

Signal: 33 (signal SIG33)

我按下"恢复程序",然后我得到相同的信号,一次又一次7-8次。之后,程序按预期继续运行,附加了调试器,我可以在断点处停止它。

SIG33是什么意思?我该如何预防?

Signal 33由bionic内部用于回溯设施。

参见__libc_current_sigrtmin.cpp.中的注释

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

有关泛型、arm、x86和mip,请参阅__SIGRTMIN的定义。

#define __SIGRTMIN 32

我认为SIG33是由gdb引起的,gdb没有正确地忽略它。

可以使用以下GDB命令行忽略和/或静音:

handle SIG33 nostop noprint

SIG33用于LLDB发出关于"线程库"的信号。

LLDB摘录来源:

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

但我似乎不明白您的代码出现这种情况的原因。可能是由于一些小的依赖性问题。