Lei*_*sen 14 android gdb remote-debugging android-ndk android-ndk-r5
我有一个C++ Android应用程序,我正在尝试使用ndk-gdb进行调试.应用程序确实使用多个线程,但据推测,ndk的r5支持多个线程.此外,我甚至没有达到gdb启动的程度.我运行命令:
ndk-gdb --start --force --verbose
Run Code Online (Sandbox Code Playgroud)
然后它找到ndk和sdk(或至少adb)的正确路径,以及所需的ABI和诸如此类的东西.
$ ndk-gdb --start --force --verbose
Android NDK installation path: /home/leif/eclipse/android-ndk-r5b
Using default adb command: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.26
Using final ADB command: '/home/leif/eclipse/android-sdk-linux_86/platform-tools/adb'
Using auto-detected project path: .
Found package name: net.leifandersen.mobile.android.marblemachine
ABIs targetted by application: armeabi
Device API Level: 10
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi
Run Code Online (Sandbox Code Playgroud)
然后它查找gdb服务器,并找到它,包括正确的PID,然后启动活动.
但是,它告诉我无法找到包:
Setup network redirection
## COMMAND: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb shell run-as <package name> lib/gdbserver +debug-socket --attach 16040
## COMMAND: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb forward tcp:5039 localfilesystem:run-as: Package '<package name>' is unknown/debug-socket
Run Code Online (Sandbox Code Playgroud)
然后,如果您不正确地使用adb(帮助文件),它会吐出您将获得的内容,然后是:
ERROR: Could not setup network redirection to gdbserver?
Maybe using --port=<port> to use a different TCP port might help?
run-as: Package '<package name>' is unknown
Run Code Online (Sandbox Code Playgroud)
我查看了/data/system/packages.list,是的,我的apk肯定在那里,它指向的位置在文件系统上是正确的.所以这不是问题.
本教程:http://vilimpoc.org/blog/2010/09/23/hello-gdbserver-a-debuggable-jni-example-for-android/建议删除并重新安装,以及清理eclipse构建.
我没有使用eclipse来构建软件包,但我确实清理了所有内容并从头开始编译,删除并重新安装以免运气.
有没有人有类似的问题,你是如何解决它们的?谢谢.
编辑:哦,我尝试了一个不同的端口无济于事,无论如何在5039(默认端口)上似乎没有任何东西.而afaik,我没有阻止该连接的防火墙.我正在开发Ubuntu 11.04.
编辑2:嗯......它看起来像新的ndk(r5c),错误信息现在也改变了:
ERROR: Could not extract package's data directory. Are you sure that
your installed application is debuggable?
Run Code Online (Sandbox Code Playgroud)
是的,在清单中将debuggable设置为true,并且所有本机代码都是使用以下内容构建的:
LOCAL_CFLAGS := -Wall -g
LOCAL_LDFLAGS := -Wl,-Map,xxx.map
Run Code Online (Sandbox Code Playgroud)
Kaz*_*oto 15
run-as: Package 'net.leifandersen.mobile.android.marblemachine' is unknown
Run Code Online (Sandbox Code Playgroud)
因此,遗憾的是,您的设备无法与ndk-gdb一起使用,因为run-as不起作用.如果要使用该设备,则必须具有root权限.
编辑:
修改ndk-gdb脚本以消除run-as的依赖性.它仅适用于root权限('adb shell whoami'应该是'root').
--- ndk-gdb 2011-02-24 16:55:07.000000000 +0900
+++ ndk-gdb-root 2011-06-09 08:35:04.000000000 +0900
@@ -465,7 +465,7 @@
log "Using app out directory: $APP_OUT"
# Find the <dataDir> of the package on the device
-DATA_DIR=`adb_shell run-as $PACKAGE_NAME /system/bin/sh -c pwd`
+DATA_DIR="/data/data/$PACKAGE_NAME"
log "Found data directory: '$DATA_DIR'"
if [ $? != 0 -o -z "$DATA_DIR" ] ; then
echo "ERROR: Could not extract package's data directory. Are you sure that"
@@ -543,7 +543,7 @@
# Launch gdbserver now
DEBUG_SOCKET=debug-socket
-run $ADB_CMD shell run-as $PACKAGE_NAME lib/gdbserver +$DEBUG_SOCKET --attach $PID &
+run $ADB_CMD shell "(cd $DATA_DIR; lib/gdbserver +$DEBUG_SOCKET --attach $PID)" &
if [ $? != 0 ] ; then
echo "ERROR: Could not launch gdbserver on the device?"
exit 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17420 次 |
| 最近记录: |