почему вы не можете использовать отладочную / выпускную версию библиотеки взаимозаменяемо - PullRequest
5 голосов
/ 26 декабря 2010

В C ++ большинство библиотек представлены в версиях Debug / Release. Вопрос 1. В чем заключается большая разница между версиями Debug и Release (например, какие преимущества вы используете по сравнению с другой).

Вопрос 2. В lib просто есть реализация функций, как изменится реализация функции, если вы используете версии отладки / выпуска?

Вопрос 3. Сможете ли вы когда-нибудь собрать свое приложение в режиме отладки и использовать выпускную версию библиотеки?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 26 декабря 2010

Ответ 1

Режим отладки

  • Содержит символы для отладки. Другими словами, ваш отладчик может связать текущее местоположение программы со своим местоположением в исходном коде
  • Потенциально содержит только отладочный код, например, код в #ifdef DEBUG блоке

Режим разблокировки

  • Быстрее, потому что он удаляет связанный с отладкой код.
  • Ограничено в отладке, поскольку в нем отсутствуют символы.

Ответ 2

  • Зависит от того, как реализована библиотека

Ответ 3

  • Только если они имеют одинаковые ABI .
1 голос
/ 26 декабря 2010

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

Кроме того, всякий раз, когда кто-то использует #ifdef DEBUG или эквивалентный код, этого кода нетверсия выпуска (конечно).Это может быть дополнительная проверка ошибок, ведение журнала, утверждение и т. Д.

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

Однако в некоторых случаях (особенно в Windows) это становится очень трудным из-за загрузки DLL, встроенной в некоторые библиотеки.Некоторые могут попытаться загрузить отладочные версии DLL, а некоторые могут захотеть выпустить.Они оба не могут быть загружены в один и тот же процесс.

...