我有一个核心转储文件需要调试。但我唯一的文件崩溃的程序是一个调试符号文件
执行和调试文件是使用以下命令生成的:
$ gcc -g -O0 -o <exec> main.c
$ objcopy --only-keep-debug <exec> <exec>.dbg
$ strip --strip-debug --strip-unneeded <exec>
字符串
当我以核心文件为目标运行lldb并尝试添加符号文件时,lldb给我一个错误:
$ lldb -c <core-file>
(lldb) target symbols add <exec>.dbg
error: symbol file '<exec>.dbg' does not match any existing module
型
然后,我尝试用我的.dbg文件添加模块,然后才将其添加为symfile。这次没有错误,但仍然没有添加符号--bt
在1个线程中只给了我1个帧,并且在gui
模式下我看不到任何代码
$ lldb -c <core-file>
(lldb) target modules add <exec>.dbg
(lldb) target symbols add <exec>.dbg
型
我的问题是:
首先,我几乎没有找到任何关于什么是lldb“模块”的信息
其次,我不明白为什么lldb需要除了我的核心和调试文件之外的任何信息。核心文件有内存的快照,调试文件有所有的符号,可以帮助解析核心文件的内容,以“人类可读”的形式。
最后,是否有可能调试核心文件与符号,但没有可执行文件?如果lldb中没有,也许在gdb或其他debbuger中有方法?或者,我可能错误地生成了调试文件?
1条答案
按热度按时间wwodge7n1#
也许在gdb或其他debbuger中有一种方法?
这对我很有效:
字符串
**更新:**以下是我采取的具体步骤:
的数据
注意:即使有一个合理的堆栈,它也是 * 不 * 正确的:
frame#3
并不存在。一般来说,请注意,你做错了--调试器需要访问代码,而不仅仅是调试符号来展开堆栈(尽管我不确定为什么会这样)。
您应该 * 要么 * 保留原始的(未剥离的)
a.out
,* 要么 * 保留 * 剥离的a.out
* 和 *a.dbg
。