【问题标题】:How do I debug Android native lib in eclipse with ARM DS-5 without going crazy?如何在 Eclipse 中使用 ARM DS-5 调试 Android 本机库而不发疯?
【发布时间】: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


【解决方案1】:

你真的需要在调试版本和发布版本之间有准确的行为吗? 如果没有,请在主 Activity 中加载该库,也可以在调试版本中加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2015-09-19
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多