Mam wskaźnik w GDB, jak mogę dowiedzieć się, gdzie został on najpierw przydzielony na stercie?W GDB, jak dowiedzieć się, kto malloc'ed adres na kupie?
W WinDBG, można to zrobić przez !heap -p -a <0x12345678>
po włączeniu gflags /i <*exe> +ust
Od Valgrind może mi powiedzieć, gdzie pamięć jest alokowana (gdy wykryje jakieś przecieki), myślę, że jest to również możliwe?
(to nie o watchpoint. Jest to biorąc pod uwagę sytuację, w której ja przypadkowo włamać się w GDB, aplikacji, spojrzeć na wskaźnik i chcą wiedzieć „kto stworzył ten kawałek pamięci”?)
Użycie odwrotnego debugowania w GDB to bardzo nowatorski sposób i prawdopodobnie poprawny sposób na rozwiązanie tego problemu. Napotkałem pewien problem z tym podejściem z GDB 7.1 - najnowszą stabilną wersją. Odwrotne debugowanie jest dość nową funkcją w GDB, więc musiałem sprawdzić HEAD (7.2), aby to naprawić.
To prawdopodobnie mówi coś o dojrzałości podejścia GDB, ale myślę, że zdecydowanie powinno być stosowane, gdy jest bardziej dojrzałe. (Niesamowita funkcja!)
Dzięki! Zarówno twoje podejście, jak i ks1322 wydają się prawidłowe. Wnikliwe jest poznanie debugowania alokacji mtrace i glib. Z drugiej strony uważam, że podejście ks1332 jest bardziej sprytne i prawdopodobnie bliższe GDB (stąd tytuł pytania). Będę eksperymentował z obydwoma i zobaczę, który z nich jest lepszy w praktyce, zanim wybierze poprawną odpowiedź. – kizzx2