【发布时间】:2012-01-14 22:00:42
【问题描述】:
我在这里召唤 Android NDK 调试忍者!
我已经尝试了很多关于调试 Android 原生代码的教程,所以我记不得全部了。 现在我正在尝试让 ARM DS-5 工作。我已经使它与 Android NDK 示例一起工作,其中主 Activity 加载库。滞后,但有效。
但我的项目有点复杂。我的 Main Activity 有一个按钮,当我点击它时,SubActivity 会启动,它会加载本机库。当我只是尝试使用 DS-5 调试器时,在加载 Main Activity 时,我想调试器尝试连接到 lib,但失败了,说:
Execution stopped at: 0xAFD0C52C
Connected to unknown platform
0xAFD0C52C POP {r4,r7}
file "D:\workspace\Project\bin\app_process"
WARNING(IMG53): app_process has no line debug information
add-symbol-file "D:\workspace\Project\bin\libc.so"
Loading library symbols: libc.so
WARNING(IMG53): libc.so has no line debug information
Execution stopped at: 0xAFD0C748
In thread 2 (OS thread id 7606)
In __futex_syscall3 (no debug info)
add-symbol-file "D:\workspace\Project\obj\local\armeabi\libName.so"
Execution stopped at: 0xAFD0C748
In thread 3 (OS thread id 7607)
Execution stopped at: 0xAFD0BFFC
In thread 4 (OS thread id 7608)
In __rt_sigtimedwait (no debug info)
Execution stopped at: 0xAFD0B854
In thread 5 (OS thread id 7609)
In select (no debug info)
Execution stopped at: 0xAFD0C748
In thread 6 (OS thread id 7610)
In __futex_syscall3 (no debug info)
Execution stopped at: 0xAFD0B70C
In thread 7 (OS thread id 7611)
In __ioctl (no debug info)
Execution stopped at: 0xAFD0B70C
In thread 8 (OS thread id 7612)
Execution stopped at: 0xAFD0C52C
In thread 1 (OS thread id 7605)
In epoll_wait (no debug info)
0xAFD0C52C POP {r4,r7}
WARNING(CMD454): The shared library D:\workspace\Project\obj\local\armeabi\libName.so is currently not loaded by the application so the request has been pended
cd "D:\workspace"
Working directory "D:\workspace"
directory "D:\workspace\Project"
Source directories searched: D:\workspace\Project;$cdir;$cwd;$idir
break -d -p "D:\workspace\Project\jni\Name.cpp":525
WARNING(CMD452-COR167):
! Breakpoint 1 has been pended
! No compilation unit matching "D:/workspace/Project/jni/Name.cpp" was found
condition 1
break-script 1 ""
ignore 1 0
break-stop-on-threads 1
unsilence 1
Breakpoint 1 unsilenced
我认为它会在 Main Activity 启动时尝试连接到本机库。但是库是稍后加载的!
我尝试了什么:
- 在 SubActivity 中设置 Java 断点,加载原生 lib 后, 然后附加 DS-5 调试器。但是我从 Eclipse 中得到了各种错误 说超时,无论如何。
- 在调试配置设置中我不能 选择应该触发本机代码调试的活动, 有组合框,但已禁用:
问题本身:如果我的 lib 没有被 main Activity 加载,我如何让 DS-5 等待 lib 加载?
【问题讨论】:
-
对于发布产品来说可能并不理想,但是您可以简单地将 System.loadlibrary 调用移至打开活动吗?对 loadlibrary 的后续调用是 noops。
-
换个方式怎么样.. 运行子活动。无论如何它应该是独立的?
-
ps.. 如果它很复杂,你做错了:)
-
我已经按照建议做...但是,在谈到 android ndk 时,复杂就是应该的:(
标签: android c++ eclipse android-ndk