2008-11-05 4 views
4

Я строю свое приложение в vc2008 и тестирую его в сети машин.Запуск vc2008 debug построен на не-dev машинах

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

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

ответ

8

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

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

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

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

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

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

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

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

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

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

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

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

0

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

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

+0

Спасибо. Даже информация о блоге Microsoft является неполной и неточной для VS 2008. – 2013-04-11 12:37:30

1

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

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

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

+0

За исключением случаев, когда вы используете MFC, который требует динамического подключения CRT ... – avakar 2012-05-15 07:57:26