调试启动过程中的 Android Native Code Crash
记录一下,最后成功使用的工具是 lldb + lldb-server,不需要 root 权限。我最先尝试使用的是,gdb + gdb-server 在 attach 后总是 crash,总感觉指令集有点问题,尝试编译一个 target platform 是 arm64 的 gdb,但是也没有成功。要求调试的包需要设置 debuggable。 在设备上启动 lldb-server 首先是要把 lldb-server 推送到设备上,然后用包体的权限运行,然后让应用启动后等待调试。
在设备上启动 lldb-server
首先是要把 lldb-server 推送到设备上,然后用包体的权限运行,然后让应用启动后等待调试。D: cd D:\SDK\Android\Sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\lib64\clang\11.0.5\lib\linux\aarch64 adb push lldb-server /data/local/tmp adb shell chmod +x /data/local/tmp/lldb-server adb shell run-as package_bundle_id killall -9 lldb-server sleep 1 adb shell run-as package_bundle_id cp /data/local/tmp/lldb-server /data/data/package_bundle_id/ adb shell am start -D -n "package_bundle_id/android.app.NativeActivity" adb shell run-as package_bundle_id sh -c '/data/data/package_bundle_id/lldb-server platform --server --listen unix-abstract:///data/data/package_bundle_id/debug.socket'"
lldb attach 到目标进程
在 windows 上启动 lldb 客户端连接上设备上的 lldb-server ,然后 attach 到目标进程。adb shell run-as package_bundle_id ps lldb > platform select remote-android > platform connect unix-abstract-connect:///data/data/package_bundle_id /debug.socket > attach <pid>
jdb
jdb 连接上目标进程。adb shell run-as package_bundle_id ps adb forward tcp:12345 jdwp:<pid> jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=12345