GDB上的堆栈跟踪问题

GDB上的堆栈跟踪问题,gdb,gdbserver,Gdb,Gdbserver,我在远程配置中使用GDB。所以我让gdbserver在运行linux的ARM硬件上运行,我从本地gdb连接到远程gdbserver,我能够在代码的初始部分设置断点,并确保gdb基本正常工作。然而,当我让我的软件运行一段时间并中断以查看线程时,我没有得到有用的线程堆栈跟踪。所有堆栈帧都是十六进制地址,不解析二进制文件中的符号。它们中的大多数看起来也一样,gdb也暗示“相同的堆栈帧,损坏的堆栈??” 无论是否使用调试器,软件都可以正常运行,因此我不怀疑我的软件。有人看到过这个问题,或者知道这里会发生

我在远程配置中使用GDB。所以我让gdbserver在运行linux的ARM硬件上运行,我从本地gdb连接到远程gdbserver,我能够在代码的初始部分设置断点,并确保gdb基本正常工作。然而,当我让我的软件运行一段时间并中断以查看线程时,我没有得到有用的线程堆栈跟踪。所有堆栈帧都是十六进制地址,不解析二进制文件中的符号。它们中的大多数看起来也一样,gdb也暗示“相同的堆栈帧,损坏的堆栈??”

无论是否使用调试器,软件都可以正常运行,因此我不怀疑我的软件。有人看到过这个问题,或者知道这里会发生什么


谢谢

你为什么不确切地告诉我们你是如何运行调试器的,你是如何编译代码的,以及你看到的一个输出示例。你能手动解析地址吗?您可以从/proc中进程的映射表中找出加载了什么文件,并且可以在非压缩二进制文件上使用objdump找出映射中符号的地址。您的gdb是否有未压缩二进制文件的主机端副本可供参考?@xaxxon,我将添加更多详细信息,谢谢您的支持reply@Chris,在主机端,我有一个未压缩的二进制文件副本。有时,某些线程的堆栈会解析为符号名。要手动解析,我需要基址(以便获得偏移量),我无法访问/proc,因为它是专有的linux硬件。有没有办法从GDB中知道基址?您似乎能够在框中执行自定义代码,那么您没有访问/proc的权限是什么意思?实际上是否没有/proc文件系统?无论如何,您也可以让您的程序从感兴趣的文件中生成几个函数的实际地址的调试输出,并使用它来计算包含这些函数的二进制文件部分的基址。