Programowanie w systemie UNIX/gdb: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
m ref |
formatowanie, literówki, zbędne spacje |
||
Linia 1:
[[File:Gdb icon.png|right|thumb|logo gdb]]
Odpluskwianie czyli debugowanie programu<ref>[
▲Odpluskwianie czyli debugowanie programu<ref>[http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ eric lippert : how-to-debug-small-programs/]</ref>
▲Programy :
▲* Gnu debugger czyli gdb<ref>[[wikipedia:]]</ref>
=Polecenia=
Linia 14 ⟶ 13:
[[File:GDB-screenshot.gif|right|thumb|ekran z zapisem innej sesji]]
Mamy program w postaci jednego plik z kodem źródłowym
Standardowa kompilacja
gcc c.c
i uruchomienie
./a.out
W celu uzyskania dodatkowych informacji kompilujemy z opcją g
gcc -g c.c
Następnie '''uruchamiamy''' debuger gdb
gdb a.out
pokazuje się informacja o gdb
<pre>
Linia 47 ⟶ 46:
</pre>
następnie informacje o uruchomionym programie
Reading symbols from /home/a/c/mandel/unroll/new/m2/a.out...done.
i symbol gotowości gdb (
(gdb)
Wpisujemy komendę uruchomienia programu
run
Linia 63 ⟶ 62:
quit
Program upewnia się
<pre>
Linia 74 ⟶ 73:
</pre>
y
Linia 81 ⟶ 80:
=Znajdowanie źródła problemu=
przykłady <ref>[http://www.de-brauwer.be/wiki/wikka.php?wakka=PinpointingSegfault
==Przykład nr 1 ==
Mamy prosty program
int main() { int x = 1/0; }
kompilujemy standardowo
gcc t.c
wynik
t.c: In function ‘main’:
t.c:3:14: warning: division by zero [-Wdiv-by-zero]
int x = 1/0;
^
uruchamiamy program pod gdb
gdb -q ./a.out
Linia 111 ⟶ 110:
Quit anyway? (y or n) y
Teraz kompilujemy z opcją g
gcc -g t.c
Linia 118 ⟶ 117:
t.c:3:14: warning: division by zero [-Wdiv-by-zero]
int x = 1/0;
i uruchamiamy pod gdb
gdb -q ./a.out
Linia 143 ⟶ 142:
==Przerwania==
Uruchamiamy sesję
gdb a.out
Linia 151 ⟶ 148:
Mamy do wyboru przerwanie przed:<ref>[http://cseweb.ucsd.edu/classes/fa09/cse141/tutorial_gcc_gdb.html Tutorial of gcc and gdb by Steven Swanson]</ref>
* linią kodu
* funkcją
* instrukcją
Informacja o przerwaniach
info breakpoint
i przykładowa odpowiedź
<pre>
Num Type Disp Enb Address What
Linia 166 ⟶ 163:
</pre>
▲Usuwanie przerwań :
clear m.c:8
'''Kontynuację''' działania programu po przerwaniu uzyskujemy za pomocą instrukcji <code>continue</code> lub skrótowo <code>c</code>
c
Linia 178 ⟶ 174:
* opis <ref>[https://sourceware.org/gdb/onlinedocs/gdb/Machine-Code.html Source and Machine Code from gdb doc]</ref>
* opis <ref>[http://stackoverflow.com/questions/1237489/how-can-i-force-gdb-to-disassemble How can I force GDB to disassemble?]</ref>
=Źródła=
<references/>
|