У меня есть указатель в GDB, как я могу узнать, где он был сначала выделен на "куче"?
В WinDBG это может быть сделано !heap -p -a <0x12345678>
после включения gflags /i <*exe> +ust
Так как Valgrind может сказать мне, где память выделяется (когда это обнаруживает некоторые утечки), я предполагаю, что это также возможно?
(Это не о контрольной точке. Этому дают ситуацию, где я случайным образом врываюсь В GDB, приложении, смотрю на указатель и хочу знать, "кто создал эту часть памяти"?)
Используя реверс, отлаживающий в GDB, очень новый путь и вероятно корректный способ решить эту проблему. Я встретился с некоторой проблемой с тем подходом с GDB 7.1 - последняя стабильная версия. Реверс, отлаживающий, является довольно новой возможностью в GDB, таким образом, я должен был проверить ГОЛОВУ (7.2) для фиксации его.
Это, вероятно, говорит, что что-то о зрелости GDB приближается, но я думаю, что это должно определенно использоваться, когда это более сформировавшееся. (Потрясающая функция!)
Valgrind перехватывает вызовы управления памятью, вот как работают средства проверки кучи. В самом GDB нет возможности сообщить вам, где данный адрес был возвращен malloc (3)
. Я предлагаю изучить отладку mtrace и glibc .
Возможно, здесь поможет обратная отладка . Попробуйте установить точку наблюдения по адресу памяти и обратное продолжение до тех пор, пока память не будет записана.
(gdb) watch *0x12345678
(gdb) reverse-continue
запись ДЕЙСТВИТЕЛЬНО запускается в программе Hello World. Черт возьми, я использую запись для отладки самого gdb!