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>[httphttps://ericlippert.com/2014/03/05/how-to-debug-small-programs/ eric lippert : how-to-debug-small-programs/]</ref>
 
Programy :
Odpluskwianie czyli debugowanie programu<ref>[http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ eric lippert : how-to-debug-small-programs/]</ref>
* Gnu debugger czyli gdb<ref>[[wikipedia:]]</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 cC, o nazwie ( przykładowej) <code>c.c</code>.<ref>[http://www.thegeekstuff.com/2011/11/valgrind-memcheck/ How to Debug C Program using gdb in 6 Simple Steps by by SathiyaMoorthy on March 15, 2010]</ref>
 
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 :<ref>[http://cseweb.ucsd.edu/classes/fa09/cse141/tutorial_gcc_gdb.html Tutorial of gcc and gdb by Steven Swanson ]</ref>
 
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 ( otwarta sesja gdb) :
 
(gdb)
 
Wpisujemy komendę uruchomienia programu :
 
run
Linia 63 ⟶ 62:
quit
 
Program upewnia się :
 
<pre>
Linia 74 ⟶ 73:
</pre>
 
potwierdzmypotwierdzamy ( yes) wpisując :
 
y
Linia 81 ⟶ 80:
 
=Znajdowanie źródła problemu=
przykłady <ref>[http://www.de-brauwer.be/wiki/wikka.php?wakka=PinpointingSegfault | Locating a segmentation fault (by ElieDeBrauwer)]</ref>
==Przykład nr 1 ==
 
Mamy prosty program :<ref>[http://unix.stackexchange.com/questions/63691/linux-gcc-compiler-options stackexchange : Linux GCC compiler options - ]</ref>
 
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 : <code>break source_filename:line_number</code> ( przykład: <code>break c.c:8 </code>)
* funkcją : <code>break source_filename:function_name</code> ( przykład : <code>break m.c:GivePeriod </code>)
* instrukcją : <code>break *PC</code> ( przykład : <code>break *0x1f7b</code> ustanawia przerwanie przed istrukcjąinstrukcją main)
 
Informacja o przerwaniach :
 
info breakpoint
 
i przykładowa odpowiedź : :
<pre>
Num Type Disp Enb Address What
Linia 166 ⟶ 163:
</pre>
 
Usuwanie przerwań :
 
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/>