Debugowanie (gdb) :: The GNU Profiler :: Biblioteki .so i .a

Debugowanie (gdb)

GDB czyli GNU Debugger jest narzędziem służącym do podglądania działania innego programu. Umożliwia ustawianie pułapek (powodujących przerwanie wykonywania na wywołaniu określonej funkcji, uruchamianie programu linia po linii, podgląd wartości zmiennych, ... . Umożliwia także sprawdzenie co program robił gdy się wywalił (na podstawie pliku core). Jest to narzędzie programistyczne, które niewątpliwie warto poznać, gdyż znacznie ułatwia poprawianie błędów w programach. Na wstępie polecam lekturę man gdb, info gdb.

Dla skorzystania z części możliwości konieczne jest wkompilowanie informacji debugerowych w program (np. gcc z opcją -g). Program uruchamiany jest przez wywołanie gdb, zazwyczaj z jedną lub dwiema opcjami - plikiem wykonywalny oraz (ewentualnie) plikiem core. Do najistotniejszych poleceń należy:

Oczywiście to tylko niewielka część wszystkich poleceń gdb, polecam zapoznać się z poszczególnymi grupami poleceń opisywanymi przez help.

GDB umożliwia również debugowanie programów na zdalnych systemach (podłączonych przez port szeregowy bądź przez sieć - zobacz man gdbserver), możliwość komunikacji przez sieć wykorzystują też programy zewnętrzne (takie jak simulavr, ice-gdb, ...).

Uruchamianie poprzez GDB przydaje się także przy debugowaniu problemów typu "segmentation fault" - po zatrzymaniu programu z powodu takiego błędu możemy wydać w gdb polecenie "backtrace" aby zobaczyć w której funkcji wystąpił problem

Wspomniany simulavr jest symulatorem mikrokontrolerów AVR (niestety nie działającym jeszcze idealnie ...) i z przystosowaną dla programowania AVR w C wersją gdb (avr-gdb), umożliwia stworzenie systemu do testowania i debugowania programów AVR na zwykłym komputerze. Aby programy te zechciały ze sobą współpracować należy:
Uruchomić simulavr z opcjami -g i -p oraz określeniem odpowiedniego urządzenia i pliku z skompilowanym programem, np. (dla atmega128): simulavr -d atmega128 -g -D -P simulavr-disp -p 2345 moj_program.hex.
Uruchomić avr-gdb z określeniem pliku zawierającego skompilowany program, a następnie kazać połączyć mu się z simulavr, poprzez komendę: target remote localhost:2345 (numer portu oczywiście możemy zmienić, ale w obu programach musi być ten sam).
Zamiast simulavr możemy sprobować debugowania w układzie za pomocą avarice: avarice -d -f moj_program.hex -P atmega128 --jtag /dev/ttyS0 :2345, natomiast jeżeli chcemy obejrzeć komendy asemblerowe zawarte w wygenerowanym kodzie polecam (analogicznie do objdump dla zwykłych programów): avr-objdump -d moj_program.elf lub (specjalnie dla AVR): revava -e moj_program.hex

Zobacz w Sieci: GCC Debugging.

The GNU Profiler

Często gdy zachodzi potrzeba przyspieszenia działania jakiejś aplikacji, programista staje przed trudnym zadaniem ustalenia co w niej chodzi zbyt wolno. W zadaniu tym nieocenioną pomocą są programy profilujące. Z generowanego w trakcie pracy programu logu profilowania wyciągają informacje o liczbie wykonania poszczególnych funkcji czy też nawet pojedynczych linijek kodu. Takim właśnie programem jest gprof.

Biblioteki .so i .a

Przy problemach z linkowaniem przydatne może być wyświetlenie symboli które zawiera konkretna biblioteka. Możemy to zrobić poleceniami:

#listowanie symboli w pliku .so:
	nm -g       PLIK.so
	nm -gC      PLIK.so  # for C++ libs
	readelf -Ws PLIK.so  # for ELF libs

#listowanie symboli w pliku .a:
	nm          PLIK.a


Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/programing/more/debuging) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2016-05-11 19:11:03 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).