Вызовите Visual Studio к всегда, 'восстанавливают все' при отладке

Править: В основном то, в чем я нуждаюсь, - чтобы Visual Studio всегда восстанавливала все, когда я поразил отладку.


Я в настоящее время использую Visual Studio для компиляции моих программ сборки, с помощью MASM, и в целом это хорошо работает.

Однако я столкнулся с раздражающей проблемой:

Если я включаю файл (скажите, файл с функциями) как это

Include functions.inc

и скомпилируйте его, это первоначально хорошо работает. Однако, если я тогда изменяю содержание functions.inc, это не распознано, и компиляторы перескакивает через functions.inc и использует старую версию до, я изменил его.

Я не могу найти, что опция где угодно под свойствами проекта фиксирует это. Однако я уверен, что это имеет некоторое отношение к опциям компоновщика или чему-то - если я вношу какие-либо изменения под свойствами проекта (даже если я изменяю что-то и возвращаю его и затем нажимаю OK), это действительно компилирует правильно с новой версией functions.inc.

Какие-либо идеи?

11
задан Cam 4 March 2010 в 04:15
поделиться

4 ответа

. Вы можете изменить поведение с помощью макроса EnvironmentEvents в макросе Visual Studio. Проводник:

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, поэтому после установки оно будет работать во всех решениях.

ОБНОВЛЕНИЕ Приведенное выше решение работает, однако оно имеет некоторые недостатки, связанные с файлами содержимого, когда среда 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
8
ответ дан 3 December 2019 в 08:29
поделиться

Поддержка кода ASM в VS не такая автоматическая магия, как .NET / C ++, и вам нужно немного помочь. Мы используем файл MAKE для компиляции нашего кода ASM в VS. Файл MAKE определяет все зависимости, поэтому изменения в файлах INC будут скомпилированы при следующей компиляции файла ASM.

Аналогичный сценарий сборки можно создать с помощью MSBuild, но мы никогда не уделяли этому времени.

1
ответ дан 3 December 2019 в 08:29
поделиться

Одним из вариантов может быть создание макроса, который просто делает rebuild all, а затем запускает отладчик. Затем привязать макрос к клавише. Я думаю, что для этого можно использовать _DTE.ExecuteCommand. А если вам нужно еще больше контроля над отладчиком, то интерфейс Debugger2 имеет довольно много функциональных возможностей.

1
ответ дан 3 December 2019 в 08:29
поделиться

Если дело в том, что VS IDE не может разобраться с зависимостями (потому что не может разобрать .asm файл и найти в нем директивы INCLUDE), то одно решение, которое очень хорошо работает с MASM - это пересборка проекта или даже решения: MASM очень, очень быстр: У меня есть несколько очень больших MASM проектов, несколько десятков .asm модулей и еще больше include: Самый большой такой проект перестраивается за (очень) несколько секунд.

Предупреждение: Впереди Kludge в квадрате. Определение предварительной сборки, которая делает касание всех ваших .asm файлов, автоматически заставит вас перестроиться...

  1. Щелкните правой кнопкой мыши на вашем проекте свойства (левая колонка, solution проводника),
  2. Перейдите к Configuration Properties / Build Events / Pre-build Event
  3. В "командной строке" введите "touch *.asm" (убедитесь, что у вас есть утилита touch в пути)

Теперь при каждой сборке все *.asm файлы будут затронуты (т.е. окажутся измененными) и таким образом перекомпилированы. И вам больше не придется помнить, что нужно перекомпилировать все файлы, так как это произойдет в любом случае. Я ведь предупреждал, что это не совсем корректно, не так ли? Кроме того, IDE сообщит вам, что ваши файлы были изменены вне редактора и хотите ли вы их перезагрузить. Вы можете ответить "да"!

0
ответ дан 3 December 2019 в 08:29
поделиться
Другие вопросы по тегам:

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