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 :)
przeglądanie stosu
- Rejestracja: dni
- Ostatnio: dni
- Postów: 199
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
- Postów: 404
Nie lepiej po prostu disassembler? Wtedy bez problemu sprawdzisz sobie wszystko co cię interesuje.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
Poczytaj najnowszego "Programistę" - tam to jest fajnie opisane, a patrząc na zawartości stosu czy rejestrów to sam wiele nie zrozumiesz.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 199
ok, to poleć jakiś disassembler na linux, ewentualnie na windows.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2412
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. framebez argumentow ci wyswietli aktualna ramke stosu |info localswyswietli 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.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Space: the final frontier
- Postów: 26433
Polecam użyć graficznej nakładki na GDB jaką masz w Eclipse CDT ;)
- Rejestracja: dni
- Ostatnio: dni
- Postów: 439
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.