如何从给定路径(包括子目录)递归加载所有符号文件?

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 中的库的嵌入式系统上特别有用。如果执行在库函数调用中间停止,调试器需要符号文件来重建堆栈。 即使库是在开发人员无权访问的单独系统上生成的,这也有效。

【讨论】:

以上是关于如何从给定路径(包括子目录)递归加载所有符号文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 apache pig 递归加载文件

C#,给定一个目录,遍历该目录下的所有文件、文件夹

Java非递归的方式获取目录中所有文件(包括目录)

案例:遍历目录

Golang 递归获取目录下所有文件

Mac递归删除指定目录及其子目录下所有符合给定命名规则的文件