Как прикрепить исходный код при использовании dbx для анализа дампа ядра

У нас есть клиент, который сообщил о сбое на сервере AIX, и он предоставил нам дамп ядра. Дамп ядра генерируется библиотеками релизов и исполняемыми файлами.

Теперь, если я использую dbx для анализа, я не смогу получить номер строки.

Есть ли способ присоединить исходный код к dbx? Могу ли я просто перекомпилировать библиотеки и исполняемый файл с отладочной информацией, а затем загрузить их в dbx, это сработает?

Или мне нужно предоставить клиенту отладочную версию наших библиотек и исполняемых файлов и позволить им воспроизвести сбой и отправить дамп ядра?

1 ответ

Решение

Файл ядра должен соответствовать тому же исполняемому файлу, к которому вы пытаетесь присоединить dbx. Если вам нужны символы отладки, вам нужно будет, чтобы клиент запустил отладочную версию (скомпилированную с -g, unstripped) и отправил вам ядро, сгенерированное из этого сбоя.

Наличие источника отображения dbx - это еще один шаг, смотрите параметр -I или команду "use", чтобы указать dbx на связанные исходные файлы с вашей отладочной сборкой.

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

Если вы особенно любите приключения, вы можете использовать комбинацию "где" (показать текущую функцию и смещение в этой функции) для отображения ассемблера. Сгенерируйте ассемблер из вашего исходного файла (опция -S из xlc), и вы можете довольно близко понять, что вызывает оператор C/C++. Я делал это много раз, когда пытался воссоздать что-то, что сбрасывает ядро ​​в производство без отладочной сборки.

Удачи!

Другие вопросы по тегам