Srodowiska Programistyczne
GNU DBG 5.2.1 port do mingw32
MinGW Team
Dodane: 01.09.2010
· Aktualizacja pliku: 08.07.2026
· Autor wpisu: SYSTEM
GNU debugger to potężne narzędzie pozwalające na debugowanie kodu różnych języków programowania m.in. C, C++, Pascal, Assemblera. Pozwala na podgląd rejestrów procesora, koprocesora, flag, stosu, załadowanych bibliotek dynamicznych, ramkach stosu i wiele innych. Poniżej przedstawiono przykł
GNU debugger to potężne narzędzie pozwalające na debugowanie kodu różnych języków programowania m.in. C, C++, Pascal, Assemblera. Pozwala na podgląd rejestrów procesora, koprocesora, flag, stosu, załadowanych bibliotek dynamicznych, ramkach stosu i wiele innych. Poniżej przedstawiono przykład pracy w GDB. Po instalacji należy dodać katalog w którym znajdują się kompilatory do zmiennych środowiska (katalog BIN). C:>path c:mingwbin Następnie za pomocą dowolnego edytora piszemy program. Poniżej program napisany w asemblerze obliczający wartość funkcji sin(60) z wykorzystaniem wzoru: sin(x*3^(k-1))=3sin(x*3^k)-4sin(x*3^-k)^3. Celem programu prócz uzyskania wyniku jest sprawdzenie ile cykli jest potrzebne na obliczenie wyniku. W rejestrze EAX znajdować się będzie liczba cykli a w rejestrze R7 jednostki FPU wynik obliczeń. SYSEXIT =1 EXIT_SUCCESS =0 .align 32 .data K: .float 0f+729.00E-0 arg1: .float 0f+1.0472E-0 arg3: .float 0f+3.00E-0 arg4: .float 0f-4.00E-0 mul1: .float 0f+0.00E-0 Cykle_L: .long 0 Cykle_H: .long 0 .text .global _start _start: finit .byte 0xF, 0x31 movl %EDX,Cykle_H(,1) movl %EAX,Cykle_L(,1) movw $6,%si movl K(,1),%eax flds arg1(,1) fdivs K(,1) fstps arg1(,1) loop1: flds arg1(,1) flds arg3(,1) fmulp flds arg1(,1) fsts mul1(,1) flds mul1(,1) fmulp flds mul1(,1) fmulp flds arg4(,1) fmulp faddp %st(1) fstps arg1(,1) dec %si cmp $0,%si jne loop1 flds arg1(,1) .byte 0x0F, 0x31 subl Cykle_L(,1),%EAX subl $9,%EAX subl Cykle_H(,1),%EDX movl $SYSEXIT, %eax int $0x80 Program w GNU Asemblerze kompilujemy za pomocą dołączonego kompilatora AS opcja –gstabs umożliwia zapamiętanie nazw symbolicznych zmiennych C:>as –gstabs sin.s -o sin.o linkujemy program C:>ld sin.o -o sin Uruchamiamy GDB jako parametr podając nazwę programu C:>gdb sin Ustawiamy break na 52 linijce wpisując break 52 (skrót: b 52) (gdb) break 52 Komendą run uruchamiamy program (gdb) run Starting program: C:fsin Breakpoint 2, loop1 () at fsin.s:53 53 movl $SYSEXIT, %eax Sprawdzamy zawartość rejestrów procesora. Po wykonaniu algorytmu eax wskazuje liczbę cyklów (czas obliczeń) (gdb) info register eax 0x31b4 12724 ecx 0x22ffb0 2293680 edx 0x0 0 ebx 0x7ffdf000 2147348480 ….. …………….. ……………… Obliczona wartość funkcji sinus po wykonaniu algorytmu znajduje się na stosie koprocesora w rejestrze st(0) (R7). Stan koprocesora sprawdzamy komendą info float (skrót: i fl) (gdb) info float =>R7: Valid 0x3ffeddb3ef0000000000 +0.86602681875228882 R6: Empty 0xbffca3e08b3af03ea708 R5: Empty 0xc0018000000000000000 R4: Empty 0x00000000000000000000 R3: Empty 0x00000000000000000000 R2: Empty 0x00000000000000000000 R1: Empty 0x00000000000000000000 R0: Empty 0x00000000000000000000 Status Word: 0xffff3820 PE TOP: 7 Control Word: 0xffff037f IM DM ZM OM UM PM PC: Extended Precision (64-bits) RC: Round to nearest (gdb)
GNU GPL Windows