远程调试共享库用gdb / gdbserver的
-
18-09-2019 - |
题
我的问题是关于用gdb / gdbserver的一个嵌入式处理器臂远程调试应用程序。
我可以调试应用程序本身,但应用程序动态地链接到其在内部通信协议实现的一个共享库。我希望能够共享库函数中设置断点,从而揣摩一些设备发现的问题。
我已经确定的是,库编译与调试符号,并通过GDB装在主机端,我可以在库中列出的功能,甚至设置断点,但只要我尝试运行应用程序,我得到一个错误消息的效果:
Cannot insert breakpoint X.
Error accessing memory address : Input/output error.
其中,X是在gdb断点数目和是地址远小是有效的。结果
我使用目标和主机两个新的图书馆,而是通过对从NFS目标mount -o bind newlib oldlib
安装。点击
有没有人有可能是错误的想法?
由于事先。
解决方案
野生猜测:您加载的共享库到宿主GDB
在不正确的地址
而不是明确地加载到GDB,使用"set stop-on-solib-event on"
,等待获得加载库(info shared
会告诉你加载库的当前目录),和然后的设置的断点。
其他提示
我看到这个问题是从2009年,但目前的答案是外的日期,所以这里的更新:
@Employed俄罗斯认为,必须使用stop-on-solib-event
。这不再是真实的; NDK R 8d各自支持在尚未将待加载solibs未决断点。
@Brent Piddy说stop-on-solib-event
不gdbserver的工作。这也不再是正确的,因为至少R8C。我公司拥有依赖于从GDB这个NDK行为的产品,我们将成为大麻烦离不开它了。
使用下面的命令来设置断点未决共享对象库加载后,将得到解决
set breakpoint pending on
不幸的是,你不能使用gdbserver的远程调试,因为gdbserver的不识别/发送solib事件“中设置止损上solib事件”。我不得不只发出一组solib搜索路径或设置SYSROOT命令来获取gdb的打在主断点后,加载所有的共享库符号。
生成高达main
然后set solib-search-path .
强>
否则,gdbserver
停止在动态加载,加载的库之前。在main
,他们应该准备好GDB。
的更多细节:调试与gdbserver的