我最近加载了新的Android开发工具,SDK 20130717和NDK r9。
到目前为止,我已经拥有了以前的版本,在我的两个系统,XP和W7 / 64上都能正常运行和调试Eclipse。
现在,在新工具安装和所需路径环境发生变化后,带有新工具的W7 / 64可以正常工作并调试我的应用程序。
当我选择“Debug As”+“Android Native Application”时,它可以正常工作。
然而XP,虽然他们在文件夹/ cygwin等方面具有确切的配置,在安装新工具和必要的路径env改变之后,它看起来它无法启动ndk-dbg而且它被卡住了明确地等待“启动MyApp(1):( 100%)”。 在我选择“Debug As”+“Android Native Application”后会发生这种情况。
有关可能原因的任何提示?要么 有没有关于XP和r9调试的任何已知问题我错过了?
感谢, 的Christos
*修改
尝试手动启动ndk-gdb,这是我得到的,欢迎任何提示
块引用
$ ndk-gdb --start --verbose --force
Android NDK安装路径:/ cygdrive / e / android-ndk-r9
使用默认的adb命令:/ cygdrive / e / adt-bundle-windows-x86-20130717 / sdk / platform-tools / adb
发现ADB版本:Android Debug Bridge版本1.0.31
使用ADB标志:
使用JDB命令:/cygdrive/e/Android/Java/jdk1.7.0_21/bin/jdb
使用自动检测的项目路径:。
找到包名:myndkpackage
申请目标ABIs:armeabi-v7a
设备API级别:17
设备CPU ABI:armeabi-v7a armeabi
兼容设备ABI:armeabi-v7a
使用gdb setup init:./ libs / armeabi-v7a / gdb.setup
使用工具链前缀:/cygdrive/e/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi -
使用app out目录:./ obj / local / armeabi-v7a
找到debuggable flag:true
找到设备gdbserver:/ data / data / myndkpackage / lib / gdbserver
找到数据目录:'/ data / data / myndkpackage'
找到第一个可启动的活动:myndkpackage.MainActivity
启动活动:myndkpackage / myndkpackage.MainActivity
命令:adb_cmd shell am start -D -n myndkpackage / myndkpackage.MainActivity
开始:意图{cmp = myndkpackage / .MainActivity}
命令:adb_cmd shell sleep 2
发现运行PID:2787
杀死现有的调试会话
命令:adb_cmd shell kill -9 2753
成功推出了gdbserver。
设置网络重定向
命令:adb_cmd shell run-as myndkpackage lib / gdbserver + debug-socket --attach 2787
命令:adb_cmd forward tcp:5039 localfilesystem:/ data / data / myndkpackage / debug-socket
附; pid = 2787
收听Unix socket debug-socket
命令:adb_cmd pull / system / bin / app_process obj / local / armeabi-v7a / app_process
599 KB / s(在0.015秒内为9588字节)
从设备/模拟器中拉出app_process。
命令:adb_cmd pull / system / bin / linker obj / local / armeabi-v7a / linker
658 KB / s(在0.093秒内为63244字节)
从设备/模拟器中拉出链接器。
命令:adb_cmd pull /system/lib/libc.so obj / local / armeabi-v7a / libc.so
744 KB / s(0.390s内297608字节)
从设备/模拟器中拉出libc.so。
设置JDB连接
命令:adb_cmd forward tcp:65534 jdwp:2787
java.io.IOException:握手失败 - 连接先关闭
at com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:136)
at com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:232)
at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:116)
at com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:90)
at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519)
at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328)
at com.sun.tools.example.debug.tty.Env.init(Env.java:63)
at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1066)
致命错误:
无法连接到目标VM。
/ cygdrive / e / android-ndk-r9 / ndk-gdb:line 742:4636 Segmentation fault $ GDBCLIENT -x
native_path $GDBSETUP
块引用
答案 0 :(得分:4)
确定,
据我所知,它是新版r9中的一个问题,特别是在名为
的文件中机器人-NDK-R9 /工具链/臂-Linux的androideabi-4.6 /预建/窗/ bin中/ ARM-Linux的androideabi-GDB
此可执行文件提供了分段错误。
所以它看起来在发行版中它从一开始就没有正确生成,来自android devs本身谁将它上传到主android网站上。
我尝试并重新下载了r9发行版并重新安装,但同样的事情发生了,所以这不是偶然的事情,例如糟糕的解压缩。
我尝试了较旧的r8e相同的文件并且它没有给出分段错误,它可以正常工作。
所以,我做了一些事情来获得我所说的概念证明并获取以前的版本文件(来自r8e)并覆盖新的r9文件,然后再次尝试运行失败的ndk-dbg和..
.. IT WORKS ..
现在我有一个新的r9 NDK,但有一个来自r8e的文件,旧的arm-linux-androideabi-gdb.exe,一切正常!
所以我猜android开发者必须重新编译
- >机器人-NDK-R9 /工具链/臂-Linux的androideabi-4.6 /预建/窗/ bin中/ ARM-Linux的androideabi-gdb.exe
工具,这次正确。
至少我希望有人会觉得这很有用,并且避免我一直都感到沮丧。
的Christos
答案 1 :(得分:3)
This is the bug。解决方法是使用Android NDK r8e中的arm-linux-androideabi-gdb.exe
(如Christos的回答中所述),或从http://code.google.com/p/mingw-and-ndk/downloads/detail?name=arm-linux-androideabi-gdb.exe下载固定文件。
答案 2 :(得分:1)
仅为了记录,gdb的问题似乎在NDK的r9b中得到修复。
https://developer.android.com/tools/sdk/ndk/index.html
修复了Windows 32位* -gdb.exe可执行文件无法解决的问题 发射。 (Issue 58975)