如何从给定路径(包括子目录)递归加载所有符号文件?
Posted
技术标签:
【中文标题】如何从给定路径(包括子目录)递归加载所有符号文件?【英文标题】:How to load all symbol-files recursively from given path including subdirectories? 【发布时间】:2011-02-19 10:58:56 【问题描述】:您可以使用以下命令将单个符号文件指向 gdb:
symbol-file /usr/lib/debug/symbolfile.so
但是如何告诉 gdb 从给定路径加载所有符号文件,包括子目录?
【问题讨论】:
你在哪个平台上?我对 Linux/ELF 有一个很好的答案,但如果那不是你的平台,我就懒得输入了。 是的,我有一个 debian linux 平台。 伙计,所有这些答案都很糟糕...How to load multiple symbol files in gdb? 同上 【参考方案1】:在 Linux 系统上,您一开始就不必使用symbol-file
GDB 命令。
诀窍是准备二进制文件,使 GDB 可以自动找到符号文件。这非常容易做到。详细说明here。
【讨论】:
好吧,假设我自己不编译任何东西。例如在 apt-get install libc-dbg 之后。我应该在调试之前通过将其复制到某处来移动已安装的调试包吗? 执行“apt-get install libc-dbg”应该允许您在 GDB 中调试 libc 任何其他符号文件命令。如果没有,那么您的 .gdbinit(很可能)已损坏、GDB 已损坏或 libc-dbg 已损坏。我建议您编辑您的问题并提供尽可能多的详细信息,包括安装了哪些软件包以及它们包含的内容,以及您的实际 GDB 会话的输出“gdb -nx -ex 'set verbose on' ./a.out "。【参考方案2】:使用以下命令: 设置 solib-search-path 路径
【讨论】:
【参考方案3】:解决办法是add-symbol-file
。例如,如果符号文件被称为lib.out
:
add-symbol-file lib.out 0
这在应用程序开发人员使用存储在 ROM 中的库的嵌入式系统上特别有用。如果执行在库函数调用中间停止,调试器需要符号文件来重建堆栈。 即使库是在开发人员无权访问的单独系统上生成的,这也有效。
【讨论】:
以上是关于如何从给定路径(包括子目录)递归加载所有符号文件?的主要内容,如果未能解决你的问题,请参考以下文章