w systemach Linux i Mac OS X Do debugowania aplikacji bez debugowania informacji mogę używać skryptów stepi i nexti.Debugowanie zdemontowanych bibliotek za pomocą gdb
Na Mac OS X gdb pokazuje funkcje, które są wywoływane wewnątrz biblioteki, chociaż czasami przesuwa kilka instrukcji asemblera w każdej instrukcji stepi.
W systemie Linux, po wejściu do biblioteki dynamicznej gdb zostaje utracony. Na przykład, w puts() istnieją trzy instrukcje asemblera wewnątrz puts(), gdy gdb osiągnie skok 0x080482bf, nie powiedzie się z komunikatem "Brak funkcji zawiera licznik programu dla wybranej klatki".
0x080482ba in [email protected]()
(gdb) disassemble
Dump of assembler code for function [email protected]:
0x080482b4 <[email protected]+0>: jmp *0x8049580
0x080482ba <[email protected]+6>: push $0x10
0x080482bf <[email protected]+11>: jmp 0x8048284 <_init+48>
End of assembler dump.
(gdb) stepi
0x080482bf in [email protected]()
(gdb) stepi
0x08048284 in ??()
(gdb) disassemble
No function contains program counter for selected frame.
Czy wiesz, jak debugować te wywołania biblioteki za pomocą gdb.
Która wersja gdb? –
Co się stanie, gdy użyjesz stepi w Linuksie? Mówisz, że nie możesz w ogóle przejść przez instrukcje, ale nie opisujesz, co się właściwie dzieje. Czy możesz opublikować próbną sesję? –
Dziękuję, używam Slackware 13.0 z preinstalowanym gdb 6.8. Wyjaśniłem, co się dzieje. – Freeman