В GDB, как узнать кто malloc'ed адрес на "куче"?

У меня есть указатель в GDB, как я могу узнать, где он был сначала выделен на "куче"?

В WinDBG это может быть сделано !heap -p -a <0x12345678> после включения gflags /i <*exe> +ust

Так как Valgrind может сказать мне, где память выделяется (когда это обнаруживает некоторые утечки), я предполагаю, что это также возможно?

(Это не о контрольной точке. Этому дают ситуацию, где я случайным образом врываюсь В GDB, приложении, смотрю на указатель и хочу знать, "кто создал эту часть памяти"?)


Используя реверс, отлаживающий в GDB, очень новый путь и вероятно корректный способ решить эту проблему. Я встретился с некоторой проблемой с тем подходом с GDB 7.1 - последняя стабильная версия. Реверс, отлаживающий, является довольно новой возможностью в GDB, таким образом, я должен был проверить ГОЛОВУ (7.2) для фиксации его.

Это, вероятно, говорит, что что-то о зрелости GDB приближается, но я думаю, что это должно определенно использоваться, когда это более сформировавшееся. (Потрясающая функция!)

7
задан kizzx2 2 August 2010 в 03:10
поделиться

3 ответа

Valgrind перехватывает вызовы управления памятью, вот как работают средства проверки кучи. В самом GDB нет возможности сообщить вам, где данный адрес был возвращен malloc (3) . Я предлагаю изучить отладку mtrace и glibc .

3
ответ дан 6 December 2019 в 21:08
поделиться

Возможно, здесь поможет обратная отладка . Попробуйте установить точку наблюдения по адресу памяти и обратное продолжение до тех пор, пока память не будет записана.

(gdb) watch *0x12345678
(gdb) reverse-continue
7
ответ дан 6 December 2019 в 21:08
поделиться

запись ДЕЙСТВИТЕЛЬНО запускается в программе Hello World. Черт возьми, я использую запись для отладки самого gdb!

2
ответ дан 6 December 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: