Как прикрепить исходный код при использовании dbx для анализа дампа ядра
У нас есть клиент, который сообщил о сбое на сервере AIX, и он предоставил нам дамп ядра. Дамп ядра генерируется библиотеками релизов и исполняемыми файлами.
Теперь, если я использую dbx для анализа, я не смогу получить номер строки.
Есть ли способ присоединить исходный код к dbx? Могу ли я просто перекомпилировать библиотеки и исполняемый файл с отладочной информацией, а затем загрузить их в dbx, это сработает?
Или мне нужно предоставить клиенту отладочную версию наших библиотек и исполняемых файлов и позволить им воспроизвести сбой и отправить дамп ядра?
1 ответ
Файл ядра должен соответствовать тому же исполняемому файлу, к которому вы пытаетесь присоединить dbx. Если вам нужны символы отладки, вам нужно будет, чтобы клиент запустил отладочную версию (скомпилированную с -g, unstripped) и отправил вам ядро, сгенерированное из этого сбоя.
Наличие источника отображения dbx - это еще один шаг, смотрите параметр -I или команду "use", чтобы указать dbx на связанные исходные файлы с вашей отладочной сборкой.
Обратите внимание, что я часто нахожу сбой в сборке отладки и выпуска. Иногда может быть неприятно.
Если вы особенно любите приключения, вы можете использовать комбинацию "где" (показать текущую функцию и смещение в этой функции) для отображения ассемблера. Сгенерируйте ассемблер из вашего исходного файла (опция -S из xlc), и вы можете довольно близко понять, что вызывает оператор C/C++. Я делал это много раз, когда пытался воссоздать что-то, что сбрасывает ядро в производство без отладочной сборки.
Удачи!