Выполнение отладочных сборок vc2008 на машинах не-dev
Я создаю свое приложение в vc2008 и тестирую его на сети машин.
Есть ли способ, кроме установки Visual Studio 2008, запустить отладочную сборку программы C++ на другом компьютере? (т.е. это не имеет установленного vc2008)
При установке пакета redist устанавливаются только библиотеки DLL поддержки режима выпуска для программ vc2008. В настоящее время он жалуется, что "Это приложение не удалось запустить из-за неправильной конфигурации приложения. Повторная установка приложения может решить эту проблему". Я предполагаю, что это код для "Я скучаю по DLL".
3 ответа
Вы не можете этого сделать, потому что не существует программы переадресации установщика для среды выполнения отладки (и фактически лицензия на программное обеспечение запрещает ее распространение, так что вы нарушите лицензионное соглашение, даже если вы что-то собрали). Однако "отладочная сборка" обычно включает 4 отдельных параметра, а остальные 3 не влияют на распространение приложения.
Создание файла.pdb (cl /Zi и link /DEBUG), который позволяет проводить символьную отладку. Возможно, вы захотите добавить /OPT:ref к параметрам компоновщика; компоновщик удаляет функции без ссылок, когда не создает файл.pdb, но в режиме / DEBUG он сохраняет их все (так как символы отладки ссылаются на них), если вы не добавите это явно.
Я обычно делаю это со всеми моими сборками, даже производственными. Пока вы снова включаете оптимизацию компоновщика с помощью /OPT:ref, это на самом деле ничего не стоит, и наличие символов может оказаться полезным, если вы захотите прочитать аварийный дамп.
Использование отладочной версии библиотеки времени выполнения C (возможно, MSVCR*D.dll, но это зависит от используемой среды выполнения). Это сводится к /MT или /MTd (или что-то еще, если не использовать среду выполнения DLL).
Это тот, который означает, что вы больше не можете распространять вещи. Это также оказывает огромное влияние на производительность некоторых функций libraty, в частности, на распределение памяти. Отладочные версии времени выполнения стараются "отравить" память, к которой они обращаются, значениями, чтобы очистить неинициализированные ошибки данных, а выпуски, как правило, оставляют старые данные круглыми, чтобы сэкономить время, касающееся их. Я полагаю, что в реализациях MSVCP* STL версии отладки также пропускают все пулы выделения, которые обычно выполняются, так что средство проверки утечек может показать именно тот блок, который вы думаете, а не какой-то больший кусок памяти, который он перераспределяет, но это означает, что он делает больше вызовов malloc поверх них намного медленнее. Если у вас есть ошибки, связанные с указателем или итератором, это может повлиять на то, какое поведение вы получаете.
Отключение оптимизации компилятора (/Od).
Этот делает много вещей (у этого вопроса есть хорошее обсуждение предмета), но в основном это ухудшает производительность. Много. К сожалению, это необходимо, если вы хотите, чтобы пошаговый режим работал плавно.
установка препроцессора #defines DEBUG или NDEBUG.
Это влияет на множество библиотек различными способами, но наиболее примечательно, что он компилируется или удаляет assert() и друзей.
Таким образом, вы можете рассмотреть возможность построения с некоторой меньшей комбинацией этих выборов. Я часто использую сборки, которые используют символы (/Zi и link / DEBUG) и утверждения (/DDEBUG), но все еще оптимизированы (/O1 или /O2 или любые другие используемые вами флаги), но с указателями фрейма стека, сохраненными для очистить трассировки (/Oy-) и использовать обычную библиотеку времени выполнения (/MT). Это работает близко к моей сборке релиза и является полуотлаживаемым (обратные трассировки хороши, пошаговое выполнение немного странно на уровне исходного кода; уровень сборки, конечно, работает нормально). Вы можете иметь сколько угодно конфигураций; просто клонируйте свой первый релиз и включите те части отладки, которые кажутся полезными.
Единственное, что должно повлиять на попытки распространения приложения - это 2.
Если вы пытаетесь отлаживать на другой машине, вас может заинтересовать msvsmon.
Конечно, вы всегда можете настроить программу для статического связывания в CRT вместо использования DLL.
Таким образом вы избежите хлопот (как с точки зрения настройки, так и с точки зрения отсутствия лицензии на перераспределение) необходимости убедиться, что отладочные библиотеки DLL установлены правильно.
Просто измените параметр "Генерация кода" для "Runtime Library" на "Многопоточная отладка (/MTd)" или используйте параметр "/MTd" в командной строке.
Прочтите этот пост в блоге, на каких файлах вы должны иметь возможность запускать отладочную версию вашего приложения и где их взять. Однако вы не можете официально распространять их третьим лицам.
Если у вас есть установщик для вашего приложения, есть также модуль слияния, который вы можете встроить для развертывания среды отладки на компьютерах без Visual Studio. Разумеется, это предназначено только для тестирования. Модули слияния расположены в C:\Program Files\Common Files\Merge Modules
,