Этот вопрос мало чем отличается от того, «как лучше починить легковой автомобиль?»
Лучший способ отладки оптимизированного кода в UNIX зависит от того, какой именно UNIX у вас есть, какие инструменты у вас есть и какие проблемы вы пытаетесь отлаживать.
Отладка сбоя в malloc
сильно отличается от отладки unresolved symbol at runtime
.
Для общих методов отладки я рекомендую эту книгу .
Несколько вещей облегчат отладку на «уровне сборки»:
- Ты должен знать призвание
конвенция для вашей платформы, так что вы
могу сказать, какие значения передаются
в и вернулся, где найти
this
указатель, регистры которого «сохранены для вызывающего абонента», а «сохранены для вызываемого абонента» и т. Д.
- Вы должны знать «соглашение о вызовах» вашей ОС - как выглядит системный вызов, в который записывается номер системного вызова, первый параметр и т. Д.
- Вы должны
«мастер» отладчик: умение
найти темы, как остановить человека
темы, как установить условный
точка останова на индивидуальной инструкции, пошаговая, пошаговая или пропускаемая вызовы функций,
и т.д.
Часто помогает отлаживать работающую программу и сломанную программу "параллельно". Если версия 1.1 работает, а версия 1.2 - нет, где они расходятся по отношению к конкретному API? Запустите обе программы под отладчиком, установите точки останова для одного и того же набора функций, запустите обе программы и наблюдайте различия в том, какие точки останова достигнуты и какие параметры переданы.