Принудительная визуальная студия всегда "перестраивает все" при отладке
Изменить: В основном мне нужна визуальная студия, которая всегда восстанавливает все, когда я удаляю debug.
В настоящее время я использую визуальную студию для компиляции моих программ сборки, используя MASM, и в целом она отлично работает.
Однако я столкнулся с раздражающей проблемой:
Если я включаю файл (скажем, файл с функциями), такой как
Include functions.inc
и скомпилируйте его, он изначально отлично работает. Однако, если я затем изменяю содержимое функций .inc, это не распознается, и компиляторы пропускают функции functions.inc и используют старую версию, прежде чем я ее изменил.
Я не могу найти вариант где-либо в свойствах проекта, чтобы исправить это. Однако я уверен, что это имеет какое-то отношение к параметрам компоновщика или чем-то - если я вношу какие-либо изменения в свойства проекта (даже если я что-то изменил и изменил его, а затем нажмите ОК), он правильно скомпилируется с новой версией functions.inc.
Любые идеи?
Ответы
Ответ 1
Вы можете изменить поведение с помощью макроса EnvironmentEvents
в Visual Studio Macro Explorer:
Private Enum IDEMode
Design = 1
Break = 2
Run = 3
End Enum
Private _IDEMode As IDEMode = IDEMode.Design
Public Sub DTEDebuggerEvents_OnDebugRun() Handles _
DebuggerEvents.OnEnterRunMode
If _IDEMode = IDEMode.Design Then
DTE.ExecuteCommand("Build.RebuildSolution")
End If
_IDEMode = IDEMode.Run
End Sub
Public Sub DTEDebuggerEvents_OnDebugDesign() Handles _
DebuggerEvents.OnEnterDesignMode
_IDEMode = IDEMode.Design
End Sub
Public Sub DTEDebuggerEvents_OnDebugBreak() Handles _
DebuggerEvents.OnEnterBreakMode
_IDEMode = IDEMode.Break
End Sub
Это изменение VisualStudio, поэтому оно будет работать во всех решениях после установки
UPDATE
Вышеупомянутое решение работает, однако оно имеет некоторые подводные камни в отношении файлов содержимого, где среда IDE будет меняться в режиме разработки, даже если отладчик работает. Он попытается построить, пока отладчик работает в некоторых ситуациях. Правильное решение таково:
Private _curDebugState As EnvDTE80.dbgProcessState
Public Sub debuggerStateChangedHandler
(ByVal NewProcess As EnvDTE.Process,
ByVal processState As EnvDTE80.dbgProcessState)
Handles DebuggerProcessEvents.OnProcessStateChanged
If _curDebugState = dbgProcessState.dbgProcessStateStop And processState = dbgProcessState.dbgProcessStateRun Then
DTE.ExecuteCommand("Build.RebuildSolution")
End If
_curDebugState = processState
End Sub
Ответ 2
Убедитесь, что вы выбрали проект запуска для сборки в Configuration Manager:
Build → Configuration Manager → отметьте столбец "Build" для всех соответствующих проектов.
Ответ 3
Поддержка ASM-кода в VS не так автоактивна, как .NET/С++, и вам нужно немного помочь. Мы используем файл MAKE для компиляции нашего ASM-кода в VS. Файл MAKE определяет все зависимости, чтобы изменения в файлах INC были скомпилированы при следующем компиляции файла ASM.
Аналогичная сборка script может быть создана с помощью MSBuild, но мы никогда не тратили время на это.
Ответ 4
Одной из возможностей может быть создание макроса, который просто восстанавливает все, а затем запускает отладчик. Затем сопоставьте макрос с ключом. Я думаю, что для этого можно использовать _DTE.ExecuteCommand. И если вам нужен еще больший контроль над отладчиком, интерфейс Debugger2 имеет довольно много функциональности.
Ответ 5
Если это связано с тем, что VS IDE не может определить зависимости (потому что он не может проанализировать файл .asm и найти там директивы INCLUDE), одно решение грубой силы, которое отлично работает с MASM, - это перестройте проект или даже решение:
MASM очень, очень быстро: у меня есть очень большие проекты MASM, несколько десятков модулей .asm и еще больше включает в себя: Самый большой такой проект перестраивается в течение (очень) нескольких секунд.
Предупреждение: Kludge в квадрате впереди.
Определение предварительной сборки, которая делает прикосновение ко всем вам .asm файлам, автоматически заставляет rebuild...
- Щелкните правой кнопкой мыши на своем проекте
свойства (левая колонка, решение
Проводник),
- Перейдите в раздел Свойства конфигурации/
Событие сборки/событие предварительной сборки
- В командной строке введите "touch"
*.asm "(убедитесь, что у вас есть утилита touch на пути)
Теперь каждый раз, когда вы строите, все *.asm файлы будут затронуты (т.е. появятся модифицированными) и, таким образом, будут перекомпилированы. И вам больше не нужно будет помнить, что вам нужно перестроить всех, поскольку это все равно произойдет. Я предупреждал, что это был клоч, не так ли? Кроме того, IDE сообщит вам, что ваши файлы были изменены вне редактора, и вы хотите перезагрузить их. Вы можете сказать "да".