asm*_*asm 5 linux gdb arm remote-debugging shared-libraries
我的问题是使用gdb/gdbserver远程调试嵌入式arm处理器上的应用程序.
我可以调试应用程序本身,但应用程序动态链接到实现内部通信协议的共享库.我希望能够在共享库函数中设置断点,以便尝试找出一些设备发现问题.
我已经确保库是用调试符号编译的并且由主机端的gdb加载,我可以在库中列出函数甚至设置断点但是当我尝试运行应用程序时,我收到一条错误消息的效果:
Cannot insert breakpoint X.
Error accessing memory address : Input/output error.
其中X是gdb中的断点号,是一个很小的地址,有效.
我在目标和主机上都使用新库,但是mount -o bind newlib oldlib在nfs mount上使用目标.
有没有人知道可能出现什么问题?提前致谢.
我看到这个问题来自2009年,但目前的答案已经过时了,所以这是一个更新:
@Employed俄罗斯建议您必须使用stop-on-solib-event.这不再是真的; NDK r8d支持尚未加载的solib中的挂起断点.
@Brent Piddy说这stop-on-solib-event不适用于gdbserver.至少从r8c开始,这也不再适用.我公司的产品依赖于GDB的这种NDK行为,没有它我们就会遇到大麻烦.
疯狂猜测:您将共享库加载到主机的GDB错误地址。
不要将其显式加载到 GDB 中,而是使用"set stop-on-solib-event on",等待库加载(info shared将告诉您当前加载的库列表),然后设置断点。