LINUX.ORG.RU

Отладка по core-файлам


0

0

Обычно, если возникает ошибка вроде двойного освобождения памяти и т. п., причину ищу посредством перезапуска программы под отладчиком при тех же данных. Тогда есть возможность посмотреть значения переменных на всём маршруте исполнения.

При запуске GDB с core-файлом получается выводить только те переменные, которые находятся в области видимости для той позиции, где непосредственно произошел сбой.

При этом ошибка на самом деле может возникать гораздо раньше: например, в цикле портится память, где хранятся служебные данные std::vector, и в конце функции программа «вылетает».

Можно ли посмотреть переменные, которые уже освобождены, допустим, счетчик в цикле выше по коду?

int function() {
  //....
  for (int i=0; i < 10; i++) {
    //...
  }
  // ...
  return val;//core dumped here
}

Когда применяется отладка по core и действительно ли она настолько ограничена?


Корка - это срез состояния программы в момент времени. Если в этот момент нужные тебе объекты при жизни программы недоступны, то и в корке их не будет. Технически, корка - это дамп адресного пространства + регистры.

mv ★★★★★
()
Ответ на: комментарий от mv

>Технически, корка - это дамп адресного пространства + регистры.

И если проблема возникла выше по стеку вызовов -- это в корке увидеть можно. =)

Sectoid ★★★★★
()

Перечитал вопрос. Йа слоупок.

>Можно ли посмотреть переменные, которые уже освобождены, допустим, счетчик в цикле выше по коду?

нет

Sectoid ★★★★★
()
Ответ на: комментарий от anonymous

А его можно прикрутить так, чтобы при выпадении в core сохранялась информация для gdb?

Да, кстати я его пробовал, без core, естественно. Вроде работает, но не совсем все сохраняет. Правда не помню, что именно оно отказывалось показать после возврата.

ipc
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.