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 и действительно ли она настолько ограничена?


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

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

mv ★★★★★ ()
Ответ на: Отладка по core-файлам от mv

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

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

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

Sectoid ★★★★★ ()

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

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

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

нет

Sectoid ★★★★★ ()
Ответ на: Отладка по core-файлам от anonymous

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

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

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

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