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.
Może lista adresowa "gdb" może być lepszym miejscem do zadawania pytań. –
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
Dla rekordu, to wydaje się działać dobrze na 'GNU gdb (GDB) 7.3.50.20111117-cvs-debian' – Jester