5

我已经为此奋斗了好几天,我已经接近了,但仍然没有运气。我正在尝试通过 ndk-build NDK_DEBUG=1 构建一个 android 应用程序,它工作得很好。我可以从 Eclipse 启动并运行它,但我想从命令行进行调试。所以我用 ndk-gdb 尝试了不同的方法,但没有运气。我已经尝试过“ndk-gdb --start --nowait --verbose”、“ndk-gdb --start --verbose”、“ndk-debug”,但似乎没有任何效果。如果我去掉“no-wait”标志,我会得到一个稍微不同的输出,但是会弹出相同的错误......

没有 no-wait 标志:

Claudias-MacBook-Pro:Android claudia$ ndk-gdb --start --verbose
Android NDK installation path: /Applications/Intel/INDE/Framework/NDK
Using default adb command: /Applications/Intel/INDE/Framework/ADT/sdk/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.31
Using ADB flags: 
Using JDB command: /usr/bin/jdb
Using auto-detected project path: .
Found package name: com.yourcompany.neckrowfish
ABIs targetted by application: armeabi armeabi-v7a
Device API Level: 19
Device CPU ABIs: x86 armeabi-v7a
Compatible device ABI: armeabi-v7a
Using gdb setup init: ./libs/armeabi-v7a/gdb.setup
Using toolchain prefix: /Applications/Intel/INDE/Framework/NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-
Using app out directory: ./obj/local/armeabi-v7a
Found debuggable flag: true
Found data directory: '/data/data/com.yourcompany.neckrowfish'
Found device gdbserver: /data/data/com.yourcompany.neckrowfish/lib/gdbserver
Found first launchable activity: .neckrowfish
Launching activity: com.yourcompany.neckrowfish/.neckrowfish
## COMMAND: adb_cmd shell am start -D -n com.yourcompany.neckrowfish/.neckrowfish
Starting: Intent { cmp=com.yourcompany.neckrowfish/.neckrowfish }
## COMMAND: adb_cmd shell sleep 2
Found running PID: 17094
Launched gdbserver succesfully.
Setup network redirection
## COMMAND: adb_cmd forward tcp:5039 localfilesystem:/data/data/com.yourcompany.neckrowfish/debug-socket
## COMMAND: adb_cmd shell run-as com.yourcompany.neckrowfish /data/data/com.yourcompany.neckrowfish/lib/gdbserver +debug-socket --attach 17094
## COMMAND: adb_cmd pull /system/bin/app_process ./obj/local/armeabi-v7a/app_process
Cannot attach to lwp 17094: Function not implemented (38)

Exiting
2859 KB/s (12780 bytes in 0.004s)
Pulled app_process from device/emulator.
## COMMAND: adb_cmd pull /system/bin/linker ./obj/local/armeabi-v7a/linker
5510 KB/s (183465 bytes in 0.032s)
Pulled linker from device/emulator.
## COMMAND: adb_cmd pull /system/lib/libc.so ./obj/local/armeabi-v7a/libc.so
3730 KB/s (824333 bytes in 0.215s)
Pulled libc.so from device/emulator.
Setup JDB connection
## COMMAND: adb_cmd forward tcp:65534 jdwp:17094
java.io.IOException: handshake failed - connection prematurally closed
    at com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:118)
    at com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:214)
    at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:98)
    at com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:72)
    at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:358)
    at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:168)
    at com.sun.tools.example.debug.tty.Env.init(Env.java:64)
    at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1010)

Fatal error:
Unable to attach to target VM.
GNU gdb (GDB) 7.3.1-gg2
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-apple-darwin --target=arm-linux-android".
For bug reporting instructions, please see:
<http://source.android.com/source/report-bugs.html>.
./obj/local/armeabi-v7a/gdb.setup:4: Error in sourced command file:
Remote connection closed
(gdb) 

这会在我的 android 设备上导致“等待调试器”通知,所以我得到的标志是:

Claudias-MacBook-Pro:Android claudia$ ndk-gdb --start --nowait --verbose
Android NDK installation path: /Applications/Intel/INDE/Framework/NDK
Using default adb command: /Applications/Intel/INDE/Framework/ADT/sdk/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.31
Using ADB flags: 
Using JDB command: /usr/bin/jdb
Using auto-detected project path: .
Found package name: com.yourcompany.neckrowfish
ABIs targetted by application: armeabi armeabi-v7a
Device API Level: 19
Device CPU ABIs: x86 armeabi-v7a
Compatible device ABI: armeabi-v7a
Using gdb setup init: ./libs/armeabi-v7a/gdb.setup
Using toolchain prefix: /Applications/Intel/INDE/Framework/NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-
Using app out directory: ./obj/local/armeabi-v7a
Found debuggable flag: true
Found data directory: '/data/data/com.yourcompany.neckrowfish'
Found device gdbserver: /data/data/com.yourcompany.neckrowfish/lib/gdbserver
Found first launchable activity: .neckrowfish
Launching activity: com.yourcompany.neckrowfish/.neckrowfish
## COMMAND: adb_cmd shell am start -n com.yourcompany.neckrowfish/.neckrowfish
Starting: Intent { cmp=com.yourcompany.neckrowfish/.neckrowfish }
Warning: Activity not started, its current task has been brought to the front
## COMMAND: adb_cmd shell sleep 2
Found running PID: 17094
Launched gdbserver succesfully.
Setup network redirection
## COMMAND: adb_cmd forward tcp:5039 localfilesystem:/data/data/com.yourcompany.neckrowfish/debug-socket
## COMMAND: adb_cmd shell run-as com.yourcompany.neckrowfish /data/data/com.yourcompany.neckrowfish/lib/gdbserver +debug-socket --attach 17094
## COMMAND: adb_cmd pull /system/bin/app_process ./obj/local/armeabi-v7a/app_process
Cannot attach to lwp 17094: Function not implemented (38)

Exiting
2539 KB/s (12780 bytes in 0.004s)
Pulled app_process from device/emulator.
## COMMAND: adb_cmd pull /system/bin/linker ./obj/local/armeabi-v7a/linker
4498 KB/s (183465 bytes in 0.039s)
Pulled linker from device/emulator.
## COMMAND: adb_cmd pull /system/lib/libc.so ./obj/local/armeabi-v7a/libc.so
2676 KB/s (824333 bytes in 0.300s)
Pulled libc.so from device/emulator.
GNU gdb (GDB) 7.3.1-gg2
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-apple-darwin --target=arm-linux-android".
For bug reporting instructions, please see:
<http://source.android.com/source/report-bugs.html>.
./obj/local/armeabi-v7a/gdb.setup:4: Error in sourced command file:
Remote connection closed
(gdb) 

有谁知道我的问题可能是什么?谢谢!!

4

2 回答 2

3

试试 - ndk-gdb.py

这个问题似乎相当普遍。我的解决方案是不使用ndk-gdb提供的 bash 脚本。无论如何,bash 脚本对我不起作用,而 python 版本对我起作用。

python 版本可能包含在最新版本的 NDK 中,但如果没有,您可以从NDK 源master的分支中获取它。

您可以在以下位置克隆它:

git clone https://android.googlesource.com/platform/ndk

拉出ndk-gdb.py文件并将其放在您的 NDK 文件夹中。由于我在撰写本文时使用brew安装 NDK,r10c,因此 NDK 位于/usr/local/opt/android-ndk.

  1. ndk-build使用调试标志调用。

    ndk-build clean all NDK_DEBUG=1

  2. 重新安装应用程序。

  3. 使用 gdb 启动它。

    ndk-gdb.py --start --verbose --project=/dir/with/android/xml

如果 Eclipse 处于打开状态,您应该会注意到调试器开始运行。

于 2014-11-03T15:31:00.573 回答
3

你可以试试:

ndk-gdb --start --verbose --force --nowait

这个对我有用

于 2015-02-05T13:48:32.440 回答