Вопрос по visual-studio, linker, msbuild, c++, batch-file – Почему msbuild и link.exe «зависают» во время сборки?

7

У нас есть несколько решений на 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. Я отправлю ответ, если смогу.

Мой плохой, я думал, что это был link.exe, который висел. Присоединение к 6 процессам, вероятно, не является полезным упражнением. Считайте, что это последнее средство. :) Может быть, с помощью ProcMon (technet.microsoft.com/en-us/sysinternals/bb896645.aspx) поможет сузить точный процесс, который вызывает зависание. Soo Wei Tan
Я попробовал это, но не уверен, что код asm был полезен - отладчик дал мне странные сообщения о потоках, которые уже вышли ... Tim
Присоединение отладчика ко всем процессам CL, MSBuild и Link.exe? Я не думаю, что это было бы весело или продуктивно. Мне пришлось бы взломать каждый из них и попытаться отладить, и учитывая, что это многоядерный процессор, это был бы кошмар. Если я что-то упустил ... Tim
Рассматривали ли вы присоединить отладчик и увидеть, где он висит? Soo Wei Tan
Вы на VS2008 с или без SP1? Я заметил, что многоуровневая логика процесса сборки изменилась после обновления до SP1. Not Sure

Ваш Ответ

6   ответов
0

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

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

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

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

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

Я установил параллель в 1, но также попробую диагностику. Спасибо Tim
Многословность MSBuild не влияет на проекты VC ++; они используют VCBuild.
Это ничего не делает для меня в сборке командной строки из MSBuild ... Если я что-то упустил. Я попробую многословный переключатель для компоновщика. Tim
8

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

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

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

VS2012 screenshot for setting

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

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

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

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

Это проект, который отлично работал на другом компьютере, но не на моем новом. Описанные симптомы соответствовали исходному выпуску 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 на другой старый компьютер с работающим проектом.

1

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

Я тоже попробую. Tim

Похожие вопросы