2015-12-03 24 views
11

Tôi đang sử dụng Android Studio để gỡ lỗi ứng dụng NativeActivity được viết bằng C++
Trong mã C++ của tôi, điều đầu tiên tôi làm trong android_main() là đợi 10 giây để trình gỡ lỗi đính kèm. Trong cửa sổ 'Debug' Tôi thấy:SIG33 khi gỡ lỗi Android gốc

Now Launching Native Debug Session 

và sau đó sau một vài giây

Debugger attached to process 28458 

và sau đó ngay sau khi nó gắn, trình gỡ lỗi được dừng lại với một tín hiệu:

Signal: 33 (signal SIG33) 

Tôi nhấn 'Tiếp tục chương trình' và sau đó tôi nhận được cùng một tín hiệu một lần nữa và một lần nữa cho 7-8 lần. Sau đó, chương trình vẫn tiếp tục như mong đợi, trình gỡ lỗi được đính kèm và tôi có thể dừng nó tại các điểm ngắt.

Ý nghĩa của SIG33 đó là gì? làm thế nào tôi có thể ngăn chặn nó?

+0

bạn đang sử dụng phiên bản Android Studio nào? – wizurd

+0

Android studio 1.3.1, NDK 10e – shoosh

+1

Chỉ cần một ý tưởng: tín hiệu 33 có thể được dùng cho chương trình và trình gỡ lỗi của bạn sẽ vượt qua nó. Tôi biết làm thế nào để làm điều này với gdb ('xử lý SIG33 nostop noprint noignore pass') nhưng không phải với trình gỡ lỗi studio android; hy vọng nó giúp. – YSC

Trả lời

5

Tín hiệu 33 được sử dụng trong nội bộ bởi bionic cho các cơ sở backtrace.

Xem comment in __libc_current_sigrtmin.cpp.

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

nét Xem các __SIGRTMIN cho generic, arm, x86, và mips.

#define __SIGRTMIN 32 

Tôi nghĩ rằng SIG33 là do gdb và gdb không bỏ qua chính xác nó.

+0

Thú vị. Tôi đang sử dụng lldb, không gdb nhưng tôi đoán lldb hoạt động theo cùng một cách và điều này không xảy ra chỉ ở rất bắt đầu khi lldb chỉ gắn liền với quá trình này. Bất kỳ ý tưởng tại sao nó sẽ không bỏ qua nó? – shoosh

+0

bạn đang sử dụng phiên bản lldb nào? Nó có lẽ không bỏ qua nó vì một lỗi hoặc nó được biên dịch cho một biến thể Linux khác. – programmerjake

1

SIG33 được sử dụng để báo hiệu về "thư viện luồng" bởi LLDB.

Trích từ nguồn LLĐB:

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

Nhưng tôi dường như không hiểu được lý do tại sao mã của bạn là nhận được này. Có thể do một số vấn đề phụ thuộc nhỏ.

Các vấn đề liên quan