1. ホーム
  2. Linux

gdbが実行可能なファイル形式でない ファイル形式が認識できない

2022-02-12 23:18:54

3.4 実行可能ファイルのデバッグ

もし  <サンプ 地獄  が複雑なプログラムだった場合、システムにインストールする前にテストとデバッグを行いたいと思うのは間違いないでしょう。上の節で、libtool のラッパースクリプトがプログラムを直接実行することを可能にするのを見たが、残念ながら、このメカニズムはデバッガを妨害する。

burger$ 


gdb地獄




GDBはフリーソフトウェアであり、そのコピーを配布することができます。
 と入力すると、その条件が表示されます。
GDB には保証がありません。詳細は "show warranty" とタイプしてください。
GDB 4.16 (i386-unknown-netbsd), (C) 1996 Free Software Foundation, Inc.

"shell": 実行可能な形式ではありません。ファイル形式が認識されない

(gdb) 



やめる



burger$


悲しいね。GDBは実行ファイルがどこにあるか知らないからうまくいかない。実行ファイルに直接

burger$ 


gdb .libs/hell



GNU gdb 5.3 (i386-unknown-netbsd)
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it
Type "show copying" to see the conditions.
There is no warranty for GDB. Type "show warranty" for details.
(gdb) 


ブレークメイン



Breakpoint 1 at 0x8048547: file main.c, line 29.
(gdb) 


実行



Starting program: /home/src/libtool/demo/.libs/hell
/home/src/libtool/demo/.libs/hell: can't load library 'libhello.so.0'

Program exited with code 020.
(gdb) 


終了



burger$


アーッ。GDB が文句を言う。  地獄  そこで、libtoolを使ってライブラリのパスを適切に設定し、デバッガを実行する必要があります。  <サンプ .libs  ディレクトリに移動し、実行ファイルラッパーで実行するだけです (  実行モード ):

burger$ 


libtool --mode=execute gdb hell



GNU gdb 5.3 (i386-unknown-netbsd)
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it
Type "show copying" to see the conditions.
There is no warranty for GDB. Type "show warranty" for details.
(gdb) 


ブレークメイン



Breakpoint 1 at 0x8048547: file main.c, line 29.
(gdb) 


実行



Starting program: /home/src/libtool/demo/.libs/hell

Breakpoint 1, main (argc=1, argv=0xbffffc40) at main.c:29
29 printf ("Welcome to GNU Hell!\n");
(gdb) 


終了



The program is running. quit anyway (and kill it)? (y or n) 


y



burger$