Cześć :)
Jak w gdb można podglądnąć jak wygląda stos "w pobliżu" rozkazu, który jest obecnie wykonywany?
Chyba, że jakoś inaczej- ja chciałbym po prostu prześledzić jak odbywa się realizacja wyjątków od kuchni w C++.
pozdro :)
Nie lepiej po prostu disassembler? Wtedy bez problemu sprawdzisz sobie wszystko co cię interesuje.
Poczytaj najnowszego "Programistę" - tam to jest fajnie opisane, a patrząc na zawartości stosu czy rejestrów to sam wiele nie zrozumiesz.
ok, to poleć jakiś disassembler na linux, ewentualnie na windows.
Co rozumiesz przez przegladanie stosu? Wyswietlanie zmiennych lokalnych? Wyswietlanie obecnej/poprzednich ramek stosu?
Anyway...
#include <stdio.h>
int main() {
int a = 10, b = 20;
printf("%d %d", a, b);
return 0;
}
Majac taki program jak powyzej.
- Kompilujesz program
gcc foo.c -o foo --debug
- Odpalasz gdb
gdb foo
- Ustawiasz breakpointa zalozmy na linii z printf
break foo.c: 5
- Uruchamiasz program
run
, zeby zatrzymal sie na ustawionym breakpointcie. -
frame
bez argumentow ci wyswietli aktualna ramke stosu |info locals
wyswietli ci zmienne lokalne wraz z wartosciami.
Przyklad dzialania i outputu (nazwa pliku bedzie ciut inna):
(gdb) break hello_world.c: 5
Breakpoint 1 at 0x804841a: file hello_world.c, line 5.
(gdb) run
Starting program: /home/vixlur/Desktop/Others/hello_world
Breakpoint 1, main () at hello_world.c:5
5 printf("%d %d", a, b);
(gdb) frame
#0 main () at hello_world.c:5
5 printf("%d %d", a, b);
(gdb) info locals
a = 10
b = 20
(gdb)
Do poczytania: http://www.chemie.fu-berlin.de/chemnet/use/info/gdb/gdb_7.html
Jeszcze odpowiadajac na ostatnie pytanie:
ok, to poleć jakiś disassembler na linux, ewentualnie na windows.
Jesli moze byc windows, to darmowa wersja IDA wydaje sie byc najlepszym rozwiazaniem. Na linuxa afair darmowa jest niedostepna.
Polecam użyć graficznej nakładki na GDB jaką masz w Eclipse CDT ;)
Mogę jedynie polecić debuggery na Windows, gdyż na Linuxie nie siedzę.
- Darmowy debugger OllyDbg v2 - http://www.ollydbg.de/version2.html - znakomita analiza kodu i prezentacja danych
Koniec ;). Chyba, że stać Cię na deasembler z wbudowanym debuggerem jak np. IDA (jest demówka, ale nie pamiętam czy posiada wbudowany debugger).
Cała reszta to syf nie warty instalowania.