2012-10-17 6 views
7

Często przydaje mi się chodzenie po stosie podczas debugowania programu i otrzymywanie symboli dla każdej prawidłowo wyrównanej wartości wielkości wskaźnika, którą napotykam. Mam dość robienia tego ręcznie, więc spróbowałem napisać polecenie, które robi to dla mnie. Problem polega na tym, że "symbol informacyjny" nie lubi używać zmiennej wygody jako jej parametru, gdy jej parametr został ustawiony za pomocą dereferencji wskaźnika. IE:Uzyskiwanie informacji o symbolu dla wartości przechowywanej w zmiennej wygodnej dla GDB

(gdb) info symbol 0xb6ca4d28 
[Useful Symbol Information] 
(gdb) set $pointer = $esp 
(gdb) while (*(int*)$pointer != 0xb6ca4d28) 
>set $pointer += 4 
>end 
(gdb) x/x $pointer 
0x6ebee064:  0xb6ca4d28 
(gdb) set $dereferencePointer = *(int *)$pointer 
(gdb) p/x $dereferencePointer 
$103 = 0xb6ca4d28 
(gdb) info symbol $dereferencePointer 
No symbol matches $dereferencePointer. 
(gdb) set $dereferencePointer = 0xb6ca4d28 
(gdb) p/x $dereferencePointer 
$104 = 0xb6ca4d28 
(gdb) info symbol $dereferencePointer 
[Useful symbol information] 
(gdb) 

Dlaczego tak jest? Czy to błąd? Czy jest inny sposób na zrobienie tego?

Dzięki!

Luc

PS: Korzystanie waniliowy GDB 7.5

Update z listy:

Najprawdopodobniej jest to błąd.

+1

Może lista adresowa "gdb" może być lepszym miejscem do zadawania pytań. –

+0

Aby śledzić: Nie znalazłem odpowiednika gbb freebsd-pytania, wysłałem to pytanie do ogólnej listy gdb i jeszcze nie otrzymałem odpowiedzi. Jeśli to zrobię, zaktualizuję pytanie. – shroudednight

+0

Dla rekordu, to wydaje się działać dobrze na 'GNU gdb (GDB) 7.3.50.20111117-cvs-debian' – Jester

Odpowiedz

1

Błąd lub nie, zalecam użycie specyfikatora formatu/a z poleceniami p i x. To zawsze działa dla mnie i jest szybsze do pisania.