Android ndk Android NDK远程调试:为什么gdb这么慢?

Android ndk Android NDK远程调试:为什么gdb这么慢?,android-ndk,gdb,remote-debugging,Android Ndk,Gdb,Remote Debugging,使用NDKR8C、Eclipse4.2、Windows764 我以前使用过远程调试程序(在其他平台上,通过千兆位以太网)来处理与本地调试没有什么不同的大型C++代码库。SDK附带的Java调试器运行速度也很快。因此,我很困惑为什么gdb连接和跨行代码的速度如此之慢 在我当前的应用程序中,大约有20个静态库和1500个源文件,连接大约需要15秒,执行步骤大约需要2秒。我更关心的是走路 有没有人曾经分析过gdb以了解问题所在?如果有,有什么建议吗?我有。我和我在NVIDIA的同事为解决这个问题向AO

使用NDKR8C、Eclipse4.2、Windows764

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

在我当前的应用程序中,大约有20个静态库和1500个源文件,连接大约需要15秒,执行步骤大约需要2秒。我更关心的是走路


有没有人曾经分析过gdb以了解问题所在?如果有,有什么建议吗?

我有。我和我在NVIDIA的同事为解决这个问题向AOSP做出了几次承诺,尽管我们的重点一直放在共享库(符号加载性能和待定符号解析)上。我们将solib加载处理速度提高了6倍。(虽然,在完成我们自己的工作后,我们发现GNU已经在7.5中解决了上游6x中的3倍,所以我们放弃了重新设计,并将相关的7.5补丁提交给了谷歌的NDK存储库,该存储库基于旧的7.3 GDB。)我相信我们所有的加速都存在于r8d中。。。但我还没查过

我想不出为什么静态库会减慢速度,但我必须承认我没有考虑过它们。您是否有特定的理由相信这一点,或者这只是为了说明调试需求的大小和范围

我们已经开始着手解决步进问题,但还没有什么可以分享的。基本上,瓶颈是ADB(特别是在Windows上)。此外,在单步执行时,GDB和gdbserver之间存在大量聊天通信,特别是当您使用带有本地窗口、寄存器窗口、表达式窗口、堆栈窗口等的IDE时,每一步都会更新。这是许多可能针对IDE用例进行优化的讨论

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

  • 使用python脚本在GDB而不是IDE中预处理watch表达式

  • 实现GDB和gdbserver之间的“超级数据包”通信。。。以最小化GDB和gdbserver之间的干扰的方式封装IDE特定通信的数据包


我们打算与Android社区分享这一切。

是的,20条静态lib评论只是为了提供范围。它全部链接到一个共享库中。我推测gdb会因为更大的代码库(由于更多的符号)而陷入困境。FWIW,共享库的调试版本约为32MB剥离,750MB未剥离。谢谢你的回答,我期待你的改进!