Заставить Visual Studio всегда «перестраивать все» при отладке - PullRequest
11 голосов
/ 04 марта 2010

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


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

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

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

Include functions.inc

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

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

Есть идеи?

Ответы [ 5 ]

8 голосов
/ 31 августа 2010

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

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
4 голосов
/ 03 января 2011

Убедитесь, что вы выбрали стартовый проект для сборки в Configuration Manager:

Build -> Configuration Manager -> проверьте столбец «Build» для всех соответствующих проектов.

1 голос
/ 05 марта 2010

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

1 голос
/ 04 марта 2010

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

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

0 голосов
/ 05 марта 2010

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

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

  1. Щелкните правой кнопкой мыши по вашему проекту свойства (левый столбец, решение Проводник),
  2. Перейти в Свойства конфигурации / События сборки / событие перед сборкой
  3. В «командной строке» введите «touch» * .asm "(убедитесь, что у вас есть сенсорная утилита в пути)

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

...