【问题标题】:Android NDK remote debugging: why is gdb so slow?Android NDK远程调试:为什么gdb这么慢?
【发布时间】:2012-12-28 16:02:25
【问题描述】:

使用 NDK r8c、Eclipse 4.2、Windows 7 64

我以前使用过远程调试器(在其他平台上,通过千兆以太网)用于大型 C++ 代码库,感觉与本地调试没有什么不同。 SDK 附带的 Java 调试器运行速度也很快。因此,我很困惑为什么 gdb 连接和跳过代码行这么慢。

在我当前的应用程序中,大约有 20 个静态库和 1500 个源文件,连接大约需要 15 秒,步进大约需要 2 秒。我更担心踩踏。

有没有人分析过 gdb 以查看问题所在?如果有,有什么建议吗?

【问题讨论】:

    标签: android-ndk gdb remote-debugging


    【解决方案1】:

    我有。我和我在 NVIDIA 的同事已经为 AOSP 做出了一些贡献来解决这个问题,尽管我们的重点一直是共享库(符号加载性能和待处理的符号解析)。我们已经将 solib 加载处理速度提高了 6 倍。 (虽然,在我们自己的工作之后,我们发现 GNU 在 7.5 中已经在上游解决了这 6x 中的 3x……所以我们放弃了重新发明,并将相关的 7.5 补丁提交到 Google 的 NDK 存储库,该存储库基于较旧的 7.3 GDB。)我相信我们所有的加速都存在于 r8d 中......但我没有检查过。

    我想不出静态库会减慢速度的任何原因,但我必须承认我没有考虑过它们。您是否有特定的理由相信这一点,或者这只是为了说明您的调试需求的规模和范围而发表的评论?

    我们已经开始研究步进问题,但还没有任何东西可以分享。基本上,瓶颈是 ADB(尤其是在 Windows 上)。此外,在单步执行时,GDB 和 gdbserver 之间有很多闲聊,尤其是当您使用带有本地窗口、寄存器窗口、表达式窗口、堆栈窗口等的 IDE 时.,每一步都更新。很多闲聊可能会针对 IDE 用例进行优化。

    我们正在考虑的一些用于加速步进的修复将是特定于 IDE 的:

    • 使用 python 脚本在 GDB 中预处理监视表达式,而不是在 IDE 中。

    • 在 GDB 和 gdbserver 之间实现“超级数据包”通信...封装特定于 IDE 的通信的数据包,以最大限度地减少 GDB 和 gdbserver 之间的干扰。

    我们打算与 Android 社​​区分享所有这些内容。

    【讨论】:

    • 是的,20 个静态库注释只是为了提供范围。这一切都链接到 1 个共享库中。我推测 gdb 会因更大的代码库而陷入困境(由于更多符号)。 FWIW,共享库的调试版本约为 32 MB 剥离,750 MB 未剥离。感谢您的回答,我期待您的改进!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多