Ubuntu 16.04でデバッグライブラリが提供する実行可能ファイルを実行しようとしていますが、perl
何らかの理由でファイルが私のアーキテクチャと一致しているように見えますが、「実行できません」
perl
Ubuntu 16.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 abort@@GLIBC_2.2.5
0000000000589020 r AboveLatin1_invlist
U accept@@GLIBC_2.2.5
U access@@GLIBC_2.2.5
000000000058e002 r a_hash.16944
U alarm@@GLIBC_2.2.5
000000000058e010 r an_array.16943
00000000005795c0 r ASCII_invlist
0000000000543430 T ASCII_TO_NEED
U atan2@@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
両方のPerlで実行すると、file
通常のPerlにいくつかのld共有オブジェクトがあるデバッグPerlが「空のインタプリタを持つ」と表示されることがわかります。リンカーと関係があるかもしれませんが、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
インタプリタが空であると報告した場合、正確に何を教えてください。
ベストアンサー1
perl-debugは、perl
実行中のプロセスを理解することを含むGDBで使用されます。たとえば、perl
実行中のプロセスのperl script.pl
pidが与えられた場合は、$PID
次のものを使用できます。
$ gdb /usr/lib/debug/usr/bin/perl $PID
ここに接続し、すべての一般的なGDB操作を実行します。。それ自体は実行可能な実行可能ファイルではなく、実行に必要な要素が不足しています。
これらのシンボルは、デフォルトの実行可能ファイルサイズの2倍以上であり、ほとんど必要ないため、別々に保存されます。この場合、これらのシンボルはデバッグに役立ちます。perl
、Perlスクリプトをデバッグするのではなく、リンクする拡張機能を開発する場合にのみ便利です。
実行可能ビットを設定することは本当に必要だとは思わないが、Debianは私が見たデバッグシンボルファイルからそれを削除しないので、場合によっては必要になるかもしれません。file
デバッグ情報に関連付けられていないファイルはすべて欠落しており、インタプリタが空であるため空です。