我的问题是关于使用 gdb/gdbserver 远程调试嵌入式 Arm 处理器上的应用程序。
我可以调试应用程序本身,但应用程序动态链接到实现内部通信协议的共享库。我希望能够在共享库函数中设置断点,因此尝试找出一些设备发现问题。
我已确保该库使用调试符号进行编译,并由主机端的 gdb 加载,我可以列出库中的函数,甚至设置断点,但一旦我尝试运行该应用程序,我就会收到一条错误消息的效果:
Cannot insert breakpoint X.
Error accessing memory address [Hex address]: Input/output error.
where X
是 gdb 中的断点编号,[Hex address]
是一个太小而无效的地址。
我在目标机和主机上都使用新库,但是通过mount -o bind newlib oldlib
从 nfs 装载到目标上。
有谁知道可能出了什么问题吗?
提前致谢。
我看到这个问题是 2009 年的,但当前的答案已经过时了,所以这里有一个更新:
@Employed Russian 建议你必须使用stop-on-solib-event
。但事实已不再如此。 NDK r8d 支持尚未加载的 solib 中的挂起断点。
@Brent Piddy 说stop-on-solib-event
不适用于 gdbserver。至少从 r8c 开始,这也不再正确。我公司有一个产品依赖于 GDB 的 NDK 行为,如果没有它,我们就会遇到大麻烦。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)