使用r9进行NDK调试可以在W7 / 64上运行但是在XP中给我带来了问题

时间:2013-07-28 17:29:16

标签: android-ndk gdbserver ndk-gdb

我最近加载了新的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

     

块引用

3 个答案:

答案 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)

在Android NDK上打开的

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