perl
を実行しようとしています Ubuntu 16.04のデバッグライブラリによって実行可能ファイルが提供されていますが、私のアーキテクチャに一致しているように見えても、何らかの理由でファイルが「実行可能ではありません」。
perl
Ubuntu16.04に同梱されている実行可能ファイルは削除されます
$ nm /usr/bin/perl
nm: /usr/bin/perl: no symbols
perl-debug
パッケージはperl
を提供します / usr / lib / debug
の下 それは取り除かれません。
$ nm /usr/lib/debug/usr/bin/perl | head
U [email protected]@GLIBC_2.2.5
0000000000589020 r AboveLatin1_invlist
U [email protected]@GLIBC_2.2.5
U [email protected]@GLIBC_2.2.5
000000000058e002 r a_hash.16944
U [email protected]@GLIBC_2.2.5
000000000058e010 r an_array.16943
00000000005795c0 r ASCII_invlist
0000000000543430 T ASCII_TO_NEED
U [email protected]@GLIBC_2.2.5
ただし、実行しようとすると、 exec *
失敗し、 bash
素敵なメッセージをお届けします:
$ /usr/lib/debug/usr/bin/perl
bash: /usr/lib/debug/usr/bin/perl: cannot execute binary file: Exec format error
file
を実行すると ただし、2つのPerlでは、デバッグPerlが「空のインタープリターを持っている」とマークされており、通常のPerlにはいくつかのld共有オブジェクトがあります。おそらくリンカーld
と何らかの関係があります 、でもそれが何なのかわかりません。
$ file /usr/bin/perl
/usr/bin/perl: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e6106890a64a3316b2adfc04bbf202f13f82b5bb, stripped
$ file /usr/lib/debug/usr/bin/perl
/usr/lib/debug/usr/bin/perl: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter *empty*, for GNU/Linux 2.6.32, BuildID[sha1]=e6106890a64a3316b2adfc04bbf202f13f82b5bb, not stripped
file
とは正確には何ですか 通訳が空であると報告されたときに教えてくれますか?
承認された回答:
perl-debug perl
(たとえば)GDBで使用するためのもので、実行中のプロセスまたは他の perl
のダンプを理解するためのシンボルが含まれています 。たとえば、実行中のプロセス perl script.pl
があるとします。 pid $ PID
を使用 、次を使用できます:
$ gdb /usr/lib/debug/usr/bin/perl $PID
それに接続し、その時点で通常のGDBのすべてのことを実行します。それ自体は実行可能な実行可能ファイルではなく、起動に必要な要素が不足しています。
シンボルはメインの実行可能ファイルの2倍以上のサイズであり、ほとんど必要ないため、別々に保持されます。この場合、シンボルは perl
のデバッグに役立ちます。 、Perlスクリプトをデバッグするのではなく、おそらくリンクする拡張機能を開発している場合にのみ役立ちます。
実行可能ビットの設定は実際には必要ないと思いますが、Debianは私が見るデバッグシンボルファイルからそれらを削除しないので、それを必要とする状況があるかもしれません。 ファイルコード> デバッグ情報に関係のないファイルがすべて欠落しているため、インタプリタが空であると通知しています。