【发布时间】:2019-06-23 07:58:49
【问题描述】:
背景
我正在使用 WSL(适用于 Linux 的 Windows 子系统)下的 gdb 8.3 调试 Android 应用程序。在调试我的应用程序gdb 时,经常会捕获 SIGSEGV 和其他终止应用程序的信号,通常是在会话中的不一致点。当应用程序在没有gdb 的情况下运行时,不会出现这些信号。我有充分的理由相信gdb 是不稳定的根源。
因此,我想使用 strace 监控正在运行的 gdb-app,希望能够运行该应用并查看当它崩溃时哪个系统函数会产生违规信号。
问题
strace 无法附加到经过 gdb 调试的 Android 应用程序,因为它无法附加到已附加的进程。
这是附加到正在运行的进程的gdbserver 命令:
dreamlte:/data/local/tmp # ./gdbserver :9999 --attach 26060
Attached; pid = 26060
Listening on port 9999
Remote debugging from host 127.0.0.1
我启动gdb,它附加到正在运行的应用程序。
将 gdb 附加到 Android 应用程序后,我尝试将 strace 附加到应用程序:
127|dreamlte:/data/local/tmp # ./strace -p 26060
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
我了解问题是应用程序进程不能附加到多个。
有没有办法将strace 附加到正在运行的 gdb-app 组合?
【问题讨论】:
-
Strace 正在增强以与 gdbserver 一起使用。 lists.strace.io/pipermail/strace-devel/2020-February/…
-
感谢您的鼓励!
标签: android debugging gdb strace