问题标签 [ndk-gdb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 您的 APP_BUILD_SCRIPT 指向一个未知文件:./jni/Android.mk
我正在尝试让 ndk-gdb 工作,但我遇到了一些问题。
我的项目结构是这样的:
问题 1:我知道我可能必须从清单所在的目录运行 ndk-gdb 对吗?或者我将 --project 参数提供给 ndk-gdb 命令。
因此,如果我尝试像这样启动 ndk-gdb:
我得到这个输出,这表明它正在尝试直接在 android_manifest 文件所在的主项目的子文件夹中找到 Android.mk,但我可能错了。
我在 Application.mk 中的 APP_BUILD_SCRIPT 路径如下所示:
APP_BUILD_SCRIPT := $(APP_PROJECT_PATH)/jni/Android.mk
但是在这里我不确定 APP_PROJECT_PATH 指的是什么。我还尝试硬编码 Android.mk 文件的完整路径,例如 /home/johan/projects/... 等,但错误仍然出现:
您的 APP_BUILD_SCRIPT 指向一个未知文件:./jni/Android.mk
所以看起来路径没有改变,就像它甚至没有看我的Application.mk一样。
我试图在完整的主干目录中搜索对 APP_PROJECT_PATH 的引用,并且此参数仅在此 Application.mk 的此文件夹中定义。我只是假设我能够创建一个项目并对其进行调试,而无需将 /jni 文件夹作为包含清单文件的文件夹下的子文件夹,对吗?
任何有关如何使调试工作的提示都值得赞赏。
android - ndk-gdb 错误:设备不支持应用程序的目标 CPU ABI
尝试运行 ndk-gdb 并收到此错误:
Android NDK 安装路径:/Library/AndroidSDK/ndk/
使用特定 adb 命令:/Library/AndroidSDK/platform-tools/adb
找到 ADB 版本:Android Debug Bridge 版本 1.0.31
使用 ADB 标志:
使用自动检测的项目路径:.
找到包名:com.dev.project
jni/Android.mk:18: * Android NDK: Aborting。. 停止。
应用程序针对的 ABI:Android NDK:
设备 API 级别:17
设备 CPU ABI:armeabi-v7a armeabi
错误:设备不支持应用程序的目标 CPU ABI!
设备支持:armeabi-v7a armeabi
包支持:Android NDK:
jni/Android.mk 中的第 18 行是导入模块调用。
这是什么意思以及如何补救?
应用程序可根据 ndk 文档进行调试。我正在使用 Mac。我可以构建和运行应用程序,所以构建脚本应该没问题。
安卓.mk
应用程序.mk
android - Eclipse Android Native 调试失败
我在获取本机调试支持以在 Windows for Android 下为我的 Eclipse 项目工作时遇到问题。不幸的是,经过超过 1 天的研究,谷歌并没有提供帮助。
我几乎是 eclipse 的初学者,所以解决方案可能很简单,因为我猜我也会做一些非标准的事情。
我的 android 项目已经在我的设备上运行良好(Acer Iconia A500 Android 3.2.1、HTC Incredible S Android 4.0.4 等)。
我使用 ADT 插件向导创建了项目,然后使用 ADT 添加的项目上下文菜单条目添加了本机支持。
然后我添加了我已经拥有的 java 文件(以前我使用 CMake 和 Android 独立工具链进行编译,尽管我从未尝试过这种方式进行远程调试)。我为那个“com.xy”创建了一个新包,我把它们放到了那里(我不想透露真正的包名,因为该项目将成为商业产品的一部分)。
然后我通过将它们拖到 jni 文件夹中来添加我的源。源代码不在 jni 文件夹内,而是链接到项目下方的位置“../../”(它是跨平台应用程序的一部分,因此我可以在不同的工具链中重用源文件)。
我还通过以下方式调整 Android.mk 来链接产品随附的 4 个静态库:
我也有一个Application.mk:
然后我在 Debug Configurations 下添加了一个新的“Android Native Application”,启动默认 Activity 并使用
调试器“${NdkGdb}”
命令文件“${NdkProject}\libs\${NdkCompatAbi}\gdb.setup”
共享库(自动添加)${NdkProject}/obj/local/$NdkCompatAbi}/
其余的也会自动添加,我认为应该以这种方式工作。
我认为奇怪的一件事是我得到了控制台输出
[2013-03-08 10:50:36 - 无法启动 cygpath。Cygwin 在路径上吗?] java.io.IOException: 无法运行程序 "cygpath": CreateProcess error=2, 系统找不到指定的文件
但是我可以通过这种方式很好地构建项目,后来我没有收到任何尝试附加 gdb 的警告(我使用的是 Msys,我也安装了 cygwin,所以我不知道为什么 Eclipse 在这里抱怨)。
当我启动应用程序时,它会在设备上启动,然后我得到以下控制台输出([Android Native Application] gdb):
我肯定用 NDK_DEBUG=1 构建,我的静态 .a 库是用 -g AndroidManifest.xml 构建的,有一个条目 android:debuggable="true"。
当我在 Eclipse 项目目录(使用 Msys)中运行“sh /ndk-gdb --verbose”时,我得到以下输出:
Android NDK 安装路径:/c/SDK/android-ndk-r7 使用默认 adb 命令:/c/SDK/android-sdks/platform-tools/adb.exe 找到 ADB 版本:Android Debug Bridge version 1.0.31 Using final ADB命令:'/c/SDK/android-sdks/platform-tools/adb.exe' 使用自动检测的项目路径:. 找到包名称:com.xy ABI 应用程序目标:armeabi-v7a 设备 API 级别:13 设备 CPU ABI:armeabi-v7a armeabi 兼容设备 ABI:armeabi-v7a 找到可调试标志:true 错误:目标上安装了不可调试的应用程序设备。请重新安装可调试版本!
我真的很想为这个项目提供原生调试支持。所以我真的很感激任何帮助。
我必须使用cygwin是真的吗?在尝试附加调试器时,我没有收到任何合理的错误消息。
android-ndk - ndk-gdb 中的 vi 绑定
我知道C+M+j
在 gdb 中进入 vi 模式。Cygwin-gdb 似乎服从我的 shell 设置 ( set -o vi
) 并自动处于 vi 模式。但是,我似乎无法让 ndk-gdb 进入 vi 模式。有谁知道怎么做?
android - 安卓 NDK + GDB
请帮助我使用ndk-gdb!
我搜索了 StackOverflow 和其他互联网 =) 但仍然做错了什么。
配置:MacOSX 64 + 最新 SDK + 最新 NDK + 最新 IDEA + Nexus 7 + 巨大的 C++ 项目。
我做了所有常见的安排:
-g -ggdb -O0
toLOCAL_CFLAGS
(也试过了-g
)APP_OPTIM := debug
debuggable=«true»
在清单中ndk-build NDK_DEBUG=1
我得到了预期的 gdb.setup 和 gdbserver 文件,但是nm
命令在我的 *.so 文件上给了我零输出。
我ndk-gdb
在项目的根文件夹中运行并开始工作 GDB - 例如,我可以暂停应用程序并恢复它,可以在地址上获取 ASM 代码等等。即使我用 设置刹车点break Class::method
,gdb 也会告诉我正确的文件名和行号。
但是断点没有达到 99%。Backstack 总是明显错误(错误的方法名称)。看起来所有符号名称和地址都映射错误。
我错过了什么?
UPD。gdb 输出以两个命令info sharedlibrary
和C
.
你可以看到
- lib3.so(主库)加载最正确(或没有?)
- 断点地址调整(这是什么意思?)
bash - 将 gdb 变量传递给从 gdb 执行的 shell 命令
我想从gdb执行一个shell命令,这个shell命令需要一个参数,这个参数是一个gdb变量。在将命令和参数传递给 shell 解释器之前,如何让 gdb 解释这个变量?
例如,在 gdb 提示符中:
我希望它打印2
在 上stdout
,但实际上它确实打印了一个空行。
编辑:我使用的是 ndk-gdb,它不支持 python 脚本。
android - run-as 包 'abc' 未知 - Galaxy S4 Jellybean 或 Android 4.3
我无法为运行 Jellybean 4.2.2 的 Galaxy S4 运行 run-as(或 ndk-gdb)。
对于 ICS 之前的设备,此问题有多个答案,但这些似乎已在 ICS 中修复。
更新 - 2013 年 8 月:在最初出现在带有 Jellybean 4.2.2 的 Galaxy S4 上之后,运行方式问题现在似乎出现在所有 4.3 设备上。请参阅此Android 错误。
在此处查看已确认的 Android 问题。
更新 - 2013 年 11 月:Google 发布了修复 Android 4.4 中运行的补丁。
android - 使用 ndk-gdb 调试 Android 原生应用程序
我正在尝试在 Eclipse 中使用 ndk-gdb 调试我的 android 应用程序,该应用程序具有一些本机(c++)代码。似乎 gdb 服务器从命令行成功启动并正在接受命令。但在 Eclipse 中显示此错误:从设备 com.android.ddmlib.SyncException 获取文件时出错:写入本地文件失败
请任何人帮助我。
android-ndk - 使用 r9 进行 NDK 调试适用于 W7/64,但在 XP 中出现问题
我最近加载了新的 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 调试的任何已知问题?
谢谢,克里斯托斯
*编辑
尝试手动启动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
使用亚行标志:
使用 JDB 命令:/cygdrive/e/Android/Java/jdk1.7.0_21/bin/jdb
使用自动检测的项目路径:.
找到的包名:myndkpackage
应用程序针对的 ABI:armeabi-v7a
设备 API 级别:17
设备 CPU ABI:armeabi-v7a armeabi
兼容设备 ABI:armeabi-v7a
使用 gdb 设置初始化:./libs/armeabi-v7a/gdb.setup
使用工具链前缀:/cygdrive/e/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-
使用应用程序输出目录:./obj/local/armeabi-v7a
找到可调试标志: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 外壳睡眠 2
发现运行PID:2787
杀死现有的调试会话
命令: adb_cmd 外壳杀死 -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 套接字调试套接字
命令: 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.093s 内 63244 字节)
从设备/模拟器中提取链接器。
命令: adb_cmd pull /system/lib/libc.so obj/local/armeabi-v7a/libc.so
744 KB/s(0.390 秒内 297608 字节)
从设备/模拟器中提取 libc.so。
设置 JDB 连接
命令:adb_cmd 转发 tcp:65534 jdwp:2787
java.io.IOException:握手失败 - 连接提前关闭
在 com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:136)
在 com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:232)
在 com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:116)
在 com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:90)
在 com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519)
在 com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328)
在 com.sun.tools.example.debug.tty.Env.init(Env.java:63)
在 com.sun.tools.example.debug.tty.TTY.main(TTY.java:1066)
致命错误:
无法附加到目标 VM。
/cygdrive/e/android-ndk-r9/ndk-gdb:第 742 行:4636 分段错误 $GDBCLIENT -x
native_path $GDBSETUP
块引用
android - 无法将 ndk-gdb 附加到 android 进程
我在 Android 应用程序中有两个进程——主应用程序进程和一个远程服务进程。本机库是从远程服务进程加载的。
我想调试本机库代码。该应用程序是可调试的。本机库是使用 ndk-build 从 Windows 命令行构建的。在 Android.mk 中,该库使用了 -g -ggdb 标志。我正在从 cygwin 运行 ndk-gdb。
测试设备:运行 Android 4.2.2 的 Galaxy Nexus
错误行:加载共享库时出错:?:无法打开共享对象文件:没有这样的文件或目录
在详细信息中,我看到 gdbserver 正在尝试附加到主应用程序进程的进程 ID。从该应用程序中的远程进程加载库是否重要。
详细的ndk-gdb运行信息- $ ndk-gdb --verbose --force
Android NDK安装路径:/cygdrive/c/work/android/ndk/android-ndk-r9-windows-x86/android-ndk-r9
使用默认adb 命令:/cygdrive/c/work/android/sdk/android-sdk_r10-windows/android-sdk-windows/platform-tools/adb
找到 ADB 版本:Android Debug Bridge 版本 1.0.31
使用 ADB 标志:
使用 JDB 命令: /cygdrive/c/program files (x86)/java/jdk1.6.0_25/bin/jdb
使用自动检测的项目路径:.
找到包名称:[application-pkg-name]
应用程序目标 ABI:armeabi
设备 API 级别:17
设备 CPU ABI:armeabi-v7a armeabi
兼容设备 ABI:armeabi
使用 gdb 设置初始化:./libs/armeabi/gdb.setup
使用工具链前缀:/cygdrive/c/work/android/ndk/android-ndk-r9-windows-x86/android-ndk-r9/toolchains/arm-linux -androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-
使用应用程序输出目录:./obj/local/armeabi
找到可调试标志:true
找到设备 gdbserver:/data/data/[applcation-pkg-name] /lib/gdbserver
找到数据目录:'/data/data/[applcation-pkg-name]'
找到运行 PID:17890
成功启动 gdbserver。
设置网络重定向
## 命令:adb_cmd shell run-as [applcation-pkg-name] lib/gdbserver +debug-socket --attach 17890
## COMMAND: adb_cmd forward tcp:5039 localfilesystem:/data/data/[applcation-pkg-name]/debug-socket Attached; pid = 17890 [注释:此 pid 用于主应用程序进程]
Listening on Unix socket debug-socket
## COMMAND: adb_cmd pull /system/bin/app_process obj/local/armeabi/app_process
493 KB/s (9592 bytes in 0.019 s)
从设备/模拟器中提取 app_process。
## 命令:adb_cmd pull /system/bin/linker obj/local/armeabi/linker
1165 KB/s(0.053 秒内 63244 个字节)
从设备/模拟器中拉出链接器。
## 命令:adb_cmd pull /system/lib/libc.so obj/local/armeabi/libc.so
2442 KB/s(0.119 秒内 297608 字节)
从设备/模拟器中提取 libc.so。
/cygdrive/c/work/android/ndk/android-ndk-r9-windows-x86/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-gdb .exe:加载共享库时出错:?:无法打开共享对象文件:没有这样的文件或目录
一些可能会有所帮助的附注 -
1)如果我在没有 --force 的情况下运行 ndk-gdb 命令,它会给我一个错误,即另一个调试会话正在运行。虽然在上次运行期间出现了 gdb 提示。2) 在 Android 4.3 上,使用相同的应用程序和设置,我收到错误消息“无法提取包的数据目录”