Выполнение отладочных сборок vc2008 на машинах не-dev - PullRequest
4 голосов
/ 05 ноября 2008

Я создаю свое приложение в vc2008 и тестирую его на сети компьютеров.

Есть ли способ, кроме установки Visual Studio 2008, запустить отладочную сборку программы C ++ на другом компьютере? (то есть, на котором не установлен vc2008)

При установке пакета redist устанавливаются только библиотеки DLL поддержки режима выпуска для программ vc2008. В настоящее время он жалуется, что «Это приложение не удалось запустить из-за неправильной конфигурации приложения. Повторная установка приложения может решить эту проблему.»

Ответы [ 3 ]

8 голосов
/ 05 ноября 2008

Вы не можете этого сделать, потому что нет программы переустановки для переустановки среды выполнения отладки (и фактически лицензия на программное обеспечение запрещает ее распространение, поэтому вы нарушите лицензионное соглашение, даже если вы что-то собрали). Однако «отладочная сборка» обычно включает 4 отдельных параметра, а остальные 3 не влияют на распространение приложения.

  1. Создание файла .pdb (cl / Zi и link / DEBUG), который позволяет выполнять символьную отладку. Вы, вероятно, хотите добавить / OPT: ref к параметрам компоновщика; компоновщик удаляет функции, на которые нет ссылок, когда не создает файл .pdb, но в режиме / DEBUG он сохраняет их все (так как символы отладки ссылаются на них), если вы не добавите это точно.

    Обычно я делаю это со всеми своими сборками, даже с производственными. Пока вы снова включаете оптимизацию компоновщика с помощью / OPT: ref, это на самом деле ничего не стоит, и наличие символов может пригодиться, если вы захотите прочитать аварийный дамп.

  2. Использование отладочной версии библиотеки времени выполнения C (возможно, MSVCR * D.dll, но это зависит от используемой среды выполнения). Это сводится к / MT или / MTd (или что-то еще, если не использовать среду выполнения DLL).

    Это то, что означает, что вы больше не можете перераспределять вещи. Это также оказывает огромное влияние на производительность некоторых функций libraty, в частности, на распределение памяти. Отладочные версии времени выполнения стараются «отравить» память, к которой они обращаются, значениями, чтобы очистить неинициализированные ошибки данных, а выпуски, как правило, оставляют старые данные круглыми, чтобы сэкономить время, касающееся их. Я полагаю, что в реализациях MSVCP * STL версии отладки также пропускают все пулы выделения, которые обычно выполняются, так что средство проверки утечек может показать именно тот блок, который вы думаете, а не какой-то больший кусок памяти, который он перераспределяет, но это означает, что он делает больше вызовов malloc поверх них намного медленнее. Если у вас есть ошибки, связанные с указателем или итератором, это может повлиять на то, какое неправильное поведение вы получите.

  3. Отключение оптимизации компилятора (/Od).

    Этот делает много вещей ( этот вопрос имеет некоторое хорошее обсуждение предмета), но в основном это ухудшает производительность. Много. К сожалению, это необходимо, если вы хотите, чтобы пошаговый режим работал плавно.

  4. установка препроцессора #defines DEBUG или NDEBUG.

    Это влияет на множество библиотек различными способами, но наиболее примечательно, что он компилируется или удаляет assert () и друзей.

Так что вы можете рассмотреть возможность построения с некоторой меньшей комбинацией этих вариантов. Я часто использую сборки, которые используют символы (/ Zi и link / DEBUG) и утверждения (/ DDEBUG), но все еще оптимизированы (/ O1 или / O2 или любые другие флаги, которые вы используете), но с указателями кадров стека, сохраненными для очистить трассировки (/ Oy-) и использовать обычную библиотеку времени выполнения (/ MT). Это работает близко к моей сборке релиза и является полуотладимым (обратные трассировки в порядке, пошаговое выполнение немного странно на уровне исходного кода; уровень сборки, конечно, работает нормально). Вы можете иметь сколько угодно конфигураций; просто клонируйте свой первый релиз и включите те части отладки, которые кажутся полезными.

Единственное, что должно повлиять на попытку распространения приложения, - это 2.

Если вы пытаетесь отлаживать на другом компьютере, вас также может заинтересовать msvsmon .

1 голос
/ 05 ноября 2008

Конечно, вы всегда можете настроить программу для статического связывания в CRT вместо использования DLL.

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

Просто измените параметр «Генерация кода» для «Runtime Library» на «Многопоточная отладка (/ MTd)» или используйте параметр «/ MTd» в командной строке.

0 голосов
/ 05 ноября 2008

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

Если у вас есть установщик для вашего приложения, есть также модуль слияния, который вы можете встроить для развертывания среды отладки на компьютерах без Visual Studio. Конечно, это предназначено только для тестирования. Модули слияния расположены в C:\Program Files\Common Files\Merge Modules.

...