Маловероятно, что текст для std::runtime_error::what()
на самом деле охватывает диапазон от 0x0804d011 до 0x08058725, как предполагает обратная трассировка. Это будет более 45 КБ кода.
Скорее всего, код поиска символов, который пытается разрешить 0x08055fa4, 0x080576c8 и т. Д., Просто находит std::runtime_error::what()
как последний используемый символ перед этими адресами, что часто является результатом удаления исполняемого файла (когда вы сделали, передав -s
переключатель на компоновщик).
Я бы сосредоточился на кадре стека # 6. Поскольку это ctor для довольно простого класса, моя SWAG будет заключаться в том, что вы передали NULL-указатель или указатель на строку, не заканчивающуюся NULL.
EDIT: обратите внимание, что если вы просто перестроите исполняемый файл из точно таких же источников без ключа -s
, вы получите гораздо более пригодный для использования стек из GDB
, используя уже существующий файл core
. Нет необходимости ждать, пока вновь созданный исполняемый файл снова выдаст core
.