LinuxおよびMacOSXIでは、stepiおよびnextiを使用して、情報をデバッグせずにアプリケーションをデバッグできます。
Mac OS Xでは、gdbはライブラリ内で呼び出される関数を表示しますが、各stepi命令でいくつかのアセンブラ命令を進める場合があります。
Linuxでは、ダイナミックライブラリにステップインするとgdbが失われます。たとえば、puts()では、puts()内に3つのアセンブラ命令があり、gdbが0x080482bfでジャンプに達すると、「関数に選択されたフレームのプログラムカウンタが含まれていません」というメッセージが表示されて失敗します。
0x080482ba in puts@plt ()
(gdb) disassemble
Dump of assembler code for function puts@plt:
0x080482b4 <puts@plt+0>: jmp *0x8049580
0x080482ba <puts@plt+6>: push $0x10
0x080482bf <puts@plt+11>: jmp 0x8048284 <_init+48>
End of assembler dump.
(gdb) stepi
0x080482bf in puts@plt ()
(gdb) stepi
0x08048284 in ?? ()
(gdb) disassemble
No function contains program counter for selected frame.
gdbを使用してこれらのライブラリ呼び出しをデバッグする方法を知っていますか。