大佬教程收集整理的这篇文章主要介绍了linux – 如何在使用dlopen加载的共享库中创建gdb打印符号?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
(gdb) print main $3 = {int (int,char **)} 0x805ba90 <main> (gdb) print sin $4 = {<text variable,no debug info>} 0xb7701230 <sin> (gdb) print gzopen $5 = {<text variable,no debug info>} 0xb720df50 <gzopen> (gdb) print dlopen $6 = {<text variable,no debug info>} 0xb77248e0 <__dlopen_nocheck> (gdb) print myfoo No symbol "myfoo" in current context.
如何让GDB找到myfoo?
@L_648_3@myfoo确实存在,因为在程序中我设法使用dlsym获取其地址(在dlopen之后),我设法调用它.只有在那之后我才将GDB附加到流程中.
原来,有@L_433_7@mydir / mylib.so:没有这样的文件或目录错误消息由GDB的attach $PID命令打印.显然GDB是在错误的目录中启动的.在启动GDB之前做正确的cd修复了问题,打印myfoo开始工作.
我想自动执行此操作:我希望GDB找出我的.so文件(加载dlopen)的位置.我能想到的近似是检查/ proc / $PID / maps(在Linux上),查找可能的目录,并在启动GDB之前将所有目录添加到GDB库搜索路径.扩展LD_LIBRARY_PATH并执行set solib-search-path / tmp / parent不起作用(ls -l /tmp/parent/mydir/myfoo.so确实有效),GDB仍然报告了No such file或directory.我如何告诉GDB在哪里寻找mydir / myfoo.so?
我的另一个问题是如何获取可能的目录列表?在Linux上,/ proc / $PID / maps包含它们 – 但是其他操作系统如FreeBSD和Mac OS X呢?
以上是大佬教程为你收集整理的linux – 如何在使用dlopen加载的共享库中创建gdb打印符号?全部内容,希望文章能够帮你解决linux – 如何在使用dlopen加载的共享库中创建gdb打印符号?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。