我有二进制文件格式“PA-RISC2.0共享可执行文件”。并通过运行此二进制文件进行核心转储。我有堆栈跟踪。为了获得更多信息,我试图提取符号表并将其加载到gdb会话中。
问题是我无法提取符号表PA-RISC2.0 SOM文件格式。命令'odump'和'nm'以ascii文本输出符号表,不能由gdb加载。
在Linux中,对于ELF文件格式,可以使用'objcopy --keep-only-debug'来提取符号表。
有没有办法从上述文件格式的可执行文件中提取符号表。
操作系统是HP-UX 11i
提前致谢。
答案 0 :(得分:0)
有没有办法从上述文件格式的可执行文件中提取符号表。
您的问题似乎是基于错误的前提 - 以某种方式从可执行文件中提取符号表信息将为GDB提供比GDB本身能够从可执行文件中提取的更多信息。它不会。
如果要保留调试符号,但希望将剥离的可执行文件发送给客户,则objcopy --keep-only-debug
可用。当您具有要调试的调试可执行文件和核心转储时,不非常有用。
更新
在gdb中,如果我能够加载符号表,我可以得到局部变量的值,如果我没有这是不可能的。
是的,但是不需要将符号表从可执行文件中提取到单独的文件中 - GDB将直接从可执行文件中加载符号表独立,无需任何额外步骤。
我怀疑你没有正确调用GDB。不要这样做:gdb -c core
。请改为:gdb /path/to/a.out /path/to/core
。
更新2:
是的我做
gdb <binary> <core>
在这种情况下,您可能错过了pxdb
预处理步骤? HP-UX版本的GDB会自动运行/opt/langtools/bin/pxdb
,将调试信息转换为GDB理解的格式。但是,您使用的GDB太旧了,或者您的系统没有安装/opt/langtools/bin/pxdb
?