14

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の使用に関しては、私は少し水が足りませんが、私が知る限り、このインスタンスでは機能するはずです。何がうまくいかないのですか?

4

5 に答える 5

21

実行可能ファイルは 64 ビット (x86-64) で、デバッガーは 32 ビット (i686-pc-linux) ビルドです。デバッガーの 64 ビット (x86-64) バージョンをインストールする必要がある場合があります。

于 2008-11-09T01:26:59.267 に答える
5

これがあなたの問題かどうかはわかりませんが、私はこの状況に頻繁に直面しました。make/automake によってビルドされるビルド ツリーの実行可能ファイルは、バイナリではなくスクリプトであるため、gdb を使用することはできません。アプリケーションをインストールしてディレクトリを変更してみてください。そうしないと、gdb がスクリプトをデバッグしようとします。

于 2008-11-09T11:35:10.537 に答える
4

質問は「./filename」と「/path/executable」を参照しています。これらは同じファイルですか?

事後分析を行う場合は、次を実行します。

gdb executable-file core-file

コア ファイルを無視する場合は、次を実行します。

gdb executable-file

どちらの場合も、' executable-file' はデバッグするバイナリへのパス名を意味します。ほとんどの場合、実際には現在のディレクトリにある単純なファイル名です。これは、デバッグ ビルドのソース コードがそこにあるためです。

Solaris では、GDB の 64 ビット ビルドは、32 ビットと 64 ビットの両方の実行可能ファイルをデバッグできるはずです (ただし、GDB の最近のバージョンではいくつか問題がありました)。逆に、32 ビットの GDB が 64 ビットの実行可能ファイルを必ずデバッグできるかどうかはわかりません。

于 2008-11-09T09:18:44.290 に答える
2

チェックする必要があるのは、実際にはbfdライブラリです。バイナリファイル記述子ライブラリは、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
于 2009-07-14T03:28:34.320 に答える
1

GNU Debugger ( gdb) は x86_64 アーキテクチャをサポートしていないようです。

そのため、それを置き換えることを目的としたLLDB Debugger ( ) を試してください。lldbi386、x86-64、および ARM 命令セットをサポートしています。

BSD/OS X ではデフォルトで利用可能で、Linux のインストールではsudo apt-get install lldb(または を使用yum) 経由でインストールできます。

詳細については、gdb から lldb へのコマンド マップページを参照してください。

于 2015-08-04T21:03:15.803 に答える