Почему msbuild и link.exe «зависают» во время сборки?

У нас есть несколько решений на C ++, и мы запускаем некоторые сценарии сборки, используя пакетные файлы, которые вызывают msbuild.exe для каждой конфигурации в решениях.

Это работало нормально на 3 машинах разработчика и одной машине сборки, но затем один из проектов начал зависать при компоновке. Это происходит только на самой новой машине с четырехъядерным процессором, 2,8 ГГц, я думаю. Он работает на Windows Server 2003, а остальные на XP или Vista.

Это происходит последовательно, даже если я изменяю порядок сборок в файле bat.

Если я запускаю сборку из IDE на этой машине, она не зависает.

Есть идеи о том, что может быть причиной этого?

Я использую Visual Studio 2008.

Edit:

Теперь я вижу, что когда он завис, запускаются следующие:

link.exe (2 instances) One with large memory usage and one with a small amount of memory usage. vcbuild.exe msbuild.exe vcbuildhelper.exe mspdbsrv.exe Edit:

Exe-файл существует, также как и файл pdb.

EXE-файл заблокирован каким-либо процессом, и я не могу удалить его или переместить. Я могу удалить файл pdb, хотя.

У меня также есть проблема, если я просто использую VCBuild.exe.

Я решил попробовать отладить 2 процесса link.exe и mspdbsrv.exe.

Когда я подключил к ним IDE отладчика / MSdev, я получил сообщение о том, что приложение заблокировано и / или что все потоки закрылись.

Я думаю, мне придется проверить пакет обновления для этой установки msdev на этой машине.

Edit:

В выходном файле debug.htm я получаю всевозможные выходные данные после генерации команды link.exe.

Однако для выпуска buildlog.htm строка linke.exe является последней строкой.

Это явно зависание в компоновщике. Определенно ошибка Microsoft.

Я сейчас пытаюсь выяснить, что такое файл .rsp (ответ компоновщика).

Когда я выпускаю:

link.exe @c:\\Release\RSP00000535202392.rsp /NOLOGO /ERRORREPORT:QUEUE

Это последняя строка в журнале сборки релиза. После этого у отладочной информации будет намного больше информации.

Переустановка другой версии Visual Studio не решила проблему.

Я открою вопрос / билет с Microsoft. Я отправлю ответ, если смогу.

 Soo Wei Tan04 июл. 2009 г., 09:24
Мой плохой, я думал, что это был link.exe, который висел. Присоединение к 6 процессам, вероятно, не является полезным упражнением. Считайте, что это последнее средство. :) Может быть, с помощью ProcMon (technet.microsoft.com/en-us/sysinternals/bb896645.aspx) поможет сузить точный процесс, который вызывает зависание.
 Tim04 июл. 2009 г., 01:45
Присоединение отладчика ко всем процессам CL, MSBuild и Link.exe? Я не думаю, что это было бы весело или продуктивно. Мне пришлось бы взломать каждый из них и попытаться отладить, и учитывая, что это многоядерный процессор, это был бы кошмар. Если я что-то упустил ...
 Tim06 июл. 2009 г., 18:06
Я попробовал это, но не уверен, что код asm был полезен - отладчик дал мне странные сообщения о потоках, которые уже вышли ...
 Soo Wei Tan03 июл. 2009 г., 22:42
Рассматривали ли вы присоединить отладчик и увидеть, где он висит?
 Not Sure07 июл. 2009 г., 00:31
Вы на VS2008 с или без SP1? Я заметил, что многоуровневая логика процесса сборки изменилась после обновления до SP1.

Ответы на вопрос(6)

наоборот, всегда принудительно перестраивать все?

 Tim04 июл. 2009 г., 01:47
Я думаю, что инкрементное связывание отключено, потому что оно не может работать с сборками MP. Я проверю. Этот скрипт всегда выполняет чистую сборку.

Меню - & gt; Инструменты - & gt; Параметры - & gt; Проекты и решения - & gt; Построить и запустить

Здесь вы можете установить & quot; подробность вывода сборки проекта MSBuild & quot; в & Quot; Диагностическое & Quot ;. Может быть, это даст больше информации о том, что пошло не так.

В этом же диалоговом окне вы можете установить & quot; Максимальное количество параллельных проектов строит & Quot; 1. Может быть, это работает вокруг link.exe & quot; повесить & quot ;.

 Tim08 июл. 2009 г., 20:31
Я установил параллель в 1, но также попробую диагностику. Спасибо
 13 июл. 2009 г., 10:24
Многословность MSBuild не влияет на проекты VC ++; они используют VCBuild.
 Tim09 июл. 2009 г., 05:22
Это ничего не делает для меня в сборке командной строки из MSBuild ... Если я что-то упустил. Я попробую многословный переключатель для компоновщика.
Решение Вопроса

поновщик зависает. Я поднял это насоединять.

В результате это является подтвержденной ошибкой в VS2008; свяжитесь с PSS, если вы хотите исправление; и исправление включено в VS2010.

Если вы не можете ждать так долго, отключите / MP (более медленные компиляции) или / LTCG (более медленный код).

VS2012 screenshot for setting

 Tim13 июл. 2009 г., 13:01
Странно, но это не объясняет, почему некоторые машины зависают, а некоторые не ...
 13 июл. 2009 г., 15:15
Это похоже на время Некоторые делают, некоторые не делают. На одной машине, иногда так и будет, иногда - нет. Компиляция с CppUnit, казалось, запустила его более надежно для нас. Кое-что о сборке ...
 Tim13 июл. 2009 г., 13:00
Благодарю. Я буду смотреть в него. Я ценю помощь.

это предлагает обернуть xcopy в cmd / c & quot; .. & quot; как решение.

Если бы это было не так, я бы порекомендовал сузить ситуацию, позволив сработать только одному процессору (т.е. удаляя / maxcpucount). Это исключило бы любую форму состояния гонки между процессами компиляции.

 22 июл. 2014 г., 16:04
У меня была точно такая же проблема с MS Visual Studio 98, работающей на виртуальной машине, настроенной с 2 ЦП, удаление одного из ЦП решило проблему
 Tim04 июл. 2009 г., 04:10
не исправить это. Но это открывает для меня другие возможности
 Tim04 июл. 2009 г., 01:46
Хм. У меня есть шаг после фиксации, который вызывает bat-файл, который копирует * .exe и * .pdb в другой каталог ... Это звучит как хороший преступник. Я возьму это и посмотрю результаты.

Это проект, который отлично работал на другом компьютере, но не на моем новом. Описанные симптомы соответствовали исходному выпуску Visual Studio 2008.

Мне удалось решить эту проблему, установив пакет обновления 1 (SP1) для Visual Studio 2010

http://www.microsoft.com/download/en/confirmation.aspx?id=23691  - или просто зайдите в Microsoft и поищите «Visual Studio 2010 с пакетом обновления 1».

Я запустил свои окна & quot; проверить наличие обновлений & quot; и думал, что я установил все пакеты обновления, но, очевидно, я не установил никаких пакетов обновления Visual Studio.

После установки VS2010 SP1 у меня больше не было этой проблемы. Я подтвердил, что некоторое время назад установил VS2010 и Service Pack 1 на другой старый компьютер с работающим проектом.

один файл pdb. Версия mspdbsrv.exe для VS2005 содержит ошибки, возможно, в версии VS2005 есть некоторые из тех же проблем. Убить его перед тем, как строить, будет иметь значение для некоторых людей. Мы собираемся добавить его и в наши сборки, так как мы регулярно страдаем от неизвестных ошибок PDB.

 Tim13 июл. 2009 г., 13:10
Я тоже попробую.

Ваш ответ на вопрос