gdb が「ファイル形式が認識されません」というメッセージが表示されて ELF 64 ビット プログラムの実行に失敗する
質問
GDB を使用してデバッグしようとしています (迷惑なセグメンテーション違反を見つけるため)。実行するとき:
gdb ./filename
コマンドラインから次のエラーが表示されます。
This GDB was configured as "i686-pc-linux-
gnu"..."/path/exec": not in executable
format: File format not recognized
実行すると:
file /path/executable/
次の情報を取得します。
ELF 64-bit LSB executable, AMD x86-64,
version 1 (SYSV), for GNU/Linux 2.4.0,
dynamically linked (uses shared libs), not stripped
GDB 6.1 を使用しており、実行可能ファイルは gcc バージョン 3.4.6 でコンパイルされています。
gdb の使用に関しては少し理解できていませんが、私の知る限り、このインスタンスでは機能するはずです。何が問題なのか何か考えはありますか?
解決
実行可能ファイルは64ビット(x86-64)で、デバッガーは32ビット(i686-pc-linux)ビルドです。デバッガーの64ビット(x86-64)バージョンをインストールする必要がある場合があります。
他のヒント
これがあなたの問題かどうかはわかりませんが、この状況に頻繁に直面しました。 make / automakeによってビルドされるビルドツリー内の実行可能ファイルはバイナリではなくスクリプトなので、gdbを使用することはできません。 gdbがスクリプトをデバッグしようとするため、アプリケーションをインストールしてディレクトリを変更してください。
質問は" ./ filename"を参照しています" / path / executable"へ。これらは同じファイルですか?
事後分析を行う場合、次を実行します:
gdb executable-file core-file
コアファイルを無視する場合は、次を実行します。
gdb executable-file
どちらの場合も、「 executable-file
」はデバッグするバイナリへのパス名を意味します。たいていの場合、デバッグビルドのソースコードがそこにあるので、実際には現在のディレクトリにある単純なファイル名です。
Solarisでは、GDBの64ビットビルドは、32ビットと64ビットの両方の実行可能ファイルをデバッグできるはずです(ただし、GDBの最近のバージョンではいくつかの問題がありました)。私はその逆については確信がありません-32ビットのGDBは64ビットの実行可能ファイルを必ずデバッグできるということです。
確認する必要があるのは、実際には bfd ライブラリです。の バイナリファイル記述子 library は、binutils / gdb が実際にバイナリ (ELF/a.out など) を解析して処理するために使用するものです。
現在サポートされているプラットフォームは objdump で確認できます。
# objdump -H
objdump: supported targets: elf32-powerpc aixcoff-rs6000 elf32-powerpcle ppcboot elf64-powerpc elf64-powerpcle elf64-little elf64-big elf32-little elf32-big srec symbolsrec tekhex binary ihex
objdump: supported architectures: rs6000:6000 rs6000:rs1 rs6000:rsc rs6000:rs2 powerpc:common powerpc:common64 powerpc:603 powerpc:EC603e powerpc:604 powerpc:403 powerpc:601 powerpc:620 powerpc:630 powerpc:a35 powerpc:rs64ii powerpc:rs64iii powerpc:7400 powerpc:e500 powerpc:MPC8XX powerpc:750
The following PPC specific disassembler options are supported for use with
the -M switch:
booke|booke32|booke64 Disassemble the BookE instructions
e300 Disassemble the e300 instructions
e500|e500x2 Disassemble the e500 instructions
efs Disassemble the EFS instructions
power4 Disassemble the Power4 instructions
power5 Disassemble the Power5 instructions
power6 Disassemble the Power6 instructions
32 Do not disassemble 64-bit instructions
64 Allow disassembly of 64-bit instructions
GNUデバッガー( gdb
)はx86_64アーキテクチャをサポートしていないようです。
だから LLDBデバッガー( lldb
)を試してくださいそれを置き換えることを目指しています。 i386、x86-64、およびARM命令セットをサポートしています。
BSD / OS Xではデフォルトで、Linuxのインストールでは sudo apt-get install lldb
(または yum
を使用)で利用可能です。
詳細: gdbからlldbへのコマンドマップページを参照してください。