A.D.Danilecki, Poznan, Polska 
Politechnika Poznanska, Wydzial Informatyki i Zarzadzania
W tej chwili adanilecki _malpa_ cs.put.poznan.pl 
Z wykorzystaniem wielu listow z uwagami od  wielu autorow 
 Krótki wstęp do programowania z wykorzystaniem inline assemblera x86
 Ten rozdział powstał dzięki pomocy Pawła Krawczyka 
kravietz _mailto_ ceti.com.pl
 
Pierwszą metodą testowania jest jak używanie
printfów, zmiennych globalne i wykomentowywanie kodu po to
żeby dojść która instrukcja powoduje błąd. Jest to bardzo pracochłonne ale mało
odkrywcze, do w końcu każdy kto pisze w C pod Linuxa stosuje/stosował podobną metodę.
Po co zmienna globalne ? Z lenistwa. łatwo potem w wersji ostatecznej wykasować
movl %%eax, %0 .. " : "m" (EAX) i mniej to zaciemnia program który i bez tego fatalnie
się czyta.)
 Możesz też spróbować debugować swój program za pomocą gdb.  
Aby skompilować program w ten sposób, by móc łatwo po nim się poruszać za 
pomocą gdb, wydaj polecenie :
  gcc -g  nazwa  -o  nazwa_prgramu_możliwego_do_debuggingu   
 Np :  gcc -g moj.c -o moj.  ("mój" jest normalnym prorgamem 
wykonywalnym, 
tyle  że zawiera symbole pomagające w debuggingu) 
Następnie wydaj polecenie : 
  gdb moj .
Zaczniesz sesję z gdb. Teraz możesz ustawiać breakpointy :na linie, np 
 (gdb)b 9 
 
na symbole 
 
  (gdb) b printf  
 
lub
na adresy 
  (gdb) b *0x008932ac  
. 
Dodatkowo możesz kazać, by 
za każdym razem, gdy program się zatrzyma, wyświetlał aktualnie wykonywaną 
instrukcję : 
   (gdb) display/i $pc  
 
Możesz też kazać mu zdeassemblować
jakąś funkcję : 
 
  (gdb) disas main  
 
lub obszar pamięci:
  (gdb) disas 0x0234 0x23421  
. 
Możesz teraz wyświetlać zmienne
widoczne w danej funkcji/bloku programu, np 
  (gdb) p b  (pod warunkiem
że b jest widoczna w danym bloku programu, tj. albo globalna, albo zadeklarowana
w tym bloku - po zakres widzialności odwołaj się do pierwszego lepszego podręcznika
do C). 
 
Możesz też wyświetlać informację o rejestrach 
 -   (gdb) p $eax  
 
informację
o tym, gdzie zaczynają się poszczególne linie 
 -   (gdb) info line 9  
 
 wypisać
kod źródłowy wokół symbolu,
 -    list main  
 wypisać adres symbolu, np
 (gdb) info line main  
- 
    
Teraz możesz juz uruchomić program : napisz
 (gdb) run  
 Program zatrzyma na się na najbliższym breakpoincie. 
Możesz teraz posuwać się do następnych breakpointów za pomocą rozkazów  step
lub pojedyńczymi krokami  si . W każdej chwili możesz uzyskać pomoc na tematy
instrukcji w gdb : help, help breakpoints itd. 
Nawet jeśli kompilowałeś program bez opcji -g, dalej możesz debugować program, tyle
że musisz się po kodzie w assemblerze poruszać za pomocą instrukcji  si 
breakpointy ustawiasz na adresy, nie możesz korzystać z informacji o liniach itd.
Zauważ, że nawet jeśli skorzystasz z opcji -g, to i tak kod w assemblerze musisz oglądać
za pomocą najlepiej instrukcji  si . Zauważ że etykiety traktowane są jako
symbole, tak samo jak funkcje; przypomnij sobie wreszcie z lekcji assemblera
czy skądkolwiek że adres bieżącej instrukcji jest w %eip, czyli by wiedzieć
gdzie jesteśmy można wydać instrukcję  (gdb) p $eip  
Poczytaj też info gdb : z linii poleceń wydaj polecenie info gdb, info gcc i miłej lektury. 
Należy tez wspomniec o istniejacych nakladkach na gdb : xgdb, kgdb (dla 
środowiska KDE) oraz ddd (nie widziałem tej nakładki na oczy).