Обычно, если возникает ошибка вроде двойного освобождения памяти и т. п., причину ищу посредством перезапуска программы под отладчиком при тех же данных. Тогда есть возможность посмотреть значения переменных на всём маршруте исполнения.
При запуске GDB с core-файлом получается выводить только те переменные, которые находятся в области видимости для той позиции, где непосредственно произошел сбой.
При этом ошибка на самом деле может возникать гораздо раньше: например, в цикле портится память, где хранятся служебные данные std::vector, и в конце функции программа «вылетает».
Можно ли посмотреть переменные, которые уже освобождены, допустим, счетчик в цикле выше по коду?
int function() {
//....
for (int i=0; i < 10; i++) {
//...
}
// ...
return val;//core dumped here
}
Когда применяется отладка по core и действительно ли она настолько ограничена?