Отладка файлов ядра, сгенерированных на компьютере клиента

Мы получаем файлы ядра при запуске нашего программного обеспечения на компьютере Заказчика. К сожалению, поскольку мы всегда компилировали с параметром -O2 без символов отладки , это приводило к ситуациям, когда мы не могли понять, почему происходит сбой, поэтому мы модифицировали сборки, так что теперь они генерируют -g и -O2. вместе. Затем мы советуем клиенту запустить двоичный файл -g, чтобы упростить отладку.

У меня есть несколько вопросов:

  1. Что происходит, когда файл ядра генерируется из дистрибутива Linux, отличного от того, который мы используем в Dev? Имеет ли смысл трассировка стека?
  2. Есть ли хорошие книги по отладке Linux или Solaris? Что-то ориентированное на пример было бы здорово. Я ищу примеры из реальной жизни, чтобы выяснить, почему подпрограмма дала сбой и как автор пришел к решению. Было бы неплохо что-то еще на уровне от среднего до продвинутого, так как я занимаюсь этим уже некоторое время. Неплохая сборка.

Вот пример сбоя, который требует, чтобы мы сказали Заказчику получить -g ver. из бинарного файла:

Program terminated with signal 11, Segmentation fault.
#0  0xffffe410 in __kernel_vsyscall ()
(gdb) where
#0  0xffffe410 in __kernel_vsyscall ()
#1  0x00454ff1 in select () from /lib/libc.so.6
...
<omitted frames>

В идеале я хотел бы выяснить, почему именно приложение разбилось - я подозреваю, что это повреждение памяти, но я не уверен на 100%.

Удаленная отладка строго запрещена.

Спасибо

7
задан Mohamed Bana 16 May 2012 в 10:12
поделиться