gdb 错误 - 文件不是可执行格式:文件格式无法识别
Posted
技术标签:
【中文标题】gdb 错误 - 文件不是可执行格式:文件格式无法识别【英文标题】:gdb error- File not in executable format: File format not recognized 【发布时间】:2018-08-04 07:44:13 【问题描述】:我正在尝试使用 gdb 调试名为 xdf 的某个程序,但是当我运行 gdb xdf 时,出现以下错误:
"/home/nealtitusthomas/X-ray_astronomy/heasoft-6.24/x86_64-pc-linux-gnu-libc2.27/bin/xdf": not in executable format: File format not recognized
程序是符号链接的,file /home/nealtitusthomas/X-ray_astronomy/heasoft-6.24/x86_64-pc-linux-gnu-libc2.27/bin/xdf
的输出是:
/home/nealtitusthomas/X-ray_astronomy/heasoft-6.24/x86_64-pc-linux-gnu-libc2.27/bin/xdf: symbolic link to ../../ftools/x86_64-pc-linux-gnu-libc2.27/bin/xdf
这里gdb error not in executable format: File format not recognized给出的解决方案说是因为安装的gdb是32位版本,程序是64位的。但是,我的 gdb 安装是 64 位的。这得到以下证实:
This GDB was configured as "x86_64-linux-gnu".
【问题讨论】:
还有...../../ftools/x86_64-pc-linux-gnu-libc2.27/bin/xdf
是什么格式?
这是一个 POSIX shell 脚本,ASCII 文本可执行文件
【参考方案1】:
file /home/nealti...
的输出
一般来说,您几乎总是应该使用file -L /home/...
来代替——该命令将取消引用任何符号链接,并告诉您在解析所有符号链接后文件是什么。
POSIX shell script, ASCII text executable
您正在尝试调试 shell 脚本。 GDB 不知道该怎么做。
您需要查看内部该shell脚本(使用您选择的编辑器),找出它最终调用的实际二进制文件,并对其进行调试。
包装外壳脚本通常如下所示:
#!/bin/sh
... some code to figure out installation directory (e.g. INSTALL_DIR)
export LD_LIBRARY_PATH="$INSTALL_DIR/lib64:..."
# Now invoke the binary:
exec "$INSTALL_DIR/bin/xdf.exe" "$@"
您要做的是将最后一行替换为:
exec /usr/bin/gdb --args "$INSTALL_DIR/bin/xdf.exe" "$@"
并正常运行您的xdf
shell 脚本。它现在会神奇地自动调用 gdb。
【讨论】:
我发现原始脚本是一个 tcl 脚本,它位于 /home/nealtitusthomas/X-ray_astronomy/heasoft-6.24/ftools/BLD/x86_64-pc-linux-gnu- libc2.27/lib/xtcl/.xdfrc 但是,我无法让 gdb 运行它。我收到 not in executable format 错误。【参考方案2】:您正在尝试在 shell 脚本上使用 GDB。就像它试图告诉你的那样,GDB 不知道如何处理它。
【讨论】:
以上是关于gdb 错误 - 文件不是可执行格式:文件格式无法识别的主要内容,如果未能解决你的问题,请参考以下文章
Qt Creator - 无法使用调试器:program.exe 不是可执行格式:文件格式无法识别
尝试将 /proc/kallsyms 添加到 gdb 以进行 vmlinux 调试:`/proc/kallsyms':无法读取符号:文件格式无法识别