У меня есть приложение C, которое мы развернули на сайте клиентов. Он был скомпилирован и работает на HP-UX. Пользователь сообщил об аварии, и мы получили дамп ядра. До сих пор я не мог дублировать крах в доме.
Как вы подозреваете, основной файл/развернутый исполняемый файл полностью лишен каких-либо символов. Когда я загружаю его в gdb и делаю bt, лучшее, что я получаю, это:
(gdb) bt
#0 0xc0199470 in ?? ()
Я могу сделать "строковое ядро" в файле, но я понимаю, что все, что у меня есть, есть все строки в исполняемом файле, поэтому кажется невозможным отследить что-либо там.
У меня есть отладочная версия (скомпилированная с -g) исполняемого файла, что, к сожалению, на пару месяцев больше, чем выпущенная версия. Если я попытаюсь запустить gdb с этим концентратором, я вижу следующее:
warning: exec file is newer than core file.
Core was generated by `program_name'.
Program terminated with signal 11, Segmentation fault.
__dld_list is not valid according to __dld_flags.
#0 0xc0199470 in ?? ()
(gdb) bt
#0 0xc0199470 in ?? ()
Хотя было бы целесообразно собрать отладочную версию и развернуть ее на клиентском сайте, а затем ждать еще одного сбоя, было бы относительно сложно и нежелательно по ряду причин.
Я хорошо знаком с кодом и имею относительно хорошее представление о том, где в коде он разбивается на основе отчета об ошибке клиента.
Есть ли какой-либо способ получить больше информации из этого основного дампа? Через строки или другой отладчик или что-нибудь еще? Спасибо.