编辑:基本上我需要的是Visual Studio在我点击调试时总是重建所有内容。
我目前正在使用visual studio来编译我的汇编程序,使用MASM,一般来说它工作正常。
然而,我遇到了一个烦人的问题:
如果我包含一个文件(比如一个带有函数的文件),就像这样
Include functions.inc
并编译它,它最初工作正常。但是,如果我然后更改 functions.inc的内容,则无法识别,并且编译器会跳过functions.inc并使用旧版本之前更改它。
我无法在项目属性下的任何位置找到一个选项来解决此问题。但是我确定它与链接器选项或其他东西有关 - 如果我在项目属性下进行任何更改(即使我更改了某些内容并将其更改回来,然后按OK),它确实可以使用新版本的functions.inc。
有什么想法吗?
答案 0 :(得分:8)
您可以通过Visual Studio的Macro Explorer中的EnvironmentEvents
宏更改行为:
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
答案 1 :(得分:4)
确保您已在Configuration Manager中选择了用于构建的启动项目:
构建 - &gt;配置管理器 - &gt;检查所有相关项目的“构建”列。
答案 2 :(得分:1)
在VS中支持ASM代码并不像.NET / C ++那样自动神奇,你需要帮助它。我们使用MAKE文件在VS中编译我们的ASM代码。 MAKE文件定义了所有依赖项,以便在下次编译ASM文件时编译INC文件中的更改。
可以使用MSBuild创建类似的构建脚本,但我们从未花时间这样做。
答案 3 :(得分:1)
一种可能性是创建一个只执行重建的宏,然后触发调试器。然后将宏映射到一个键。我认为可以使用_DTE.ExecuteCommand。如果您想要更好地控制调试器,Debugger2接口会暴露出相当多的功能。
答案 4 :(得分:0)
如果VS IDE无法找出依赖关系(因为它无法解析.asm文件并在那里找到INCLUDE指令),那么与MASM配合得很好的一个强力解决方案就是重建项目甚至解决方案: MASM非常非常快:我有一些非常大的MASM项目,几十个.asm模块甚至更多包括:最大的这样的项目在很短的几秒钟内重建。
警告:Kludge前方。 定义一个触及所有.asm文件的预构建会自动强制重建...
现在每次构建时,所有* .asm文件都会被触摸(即显示已修改)并因此重新编译。而且你不必再记得你必须重建所有,因为无论如何都会发生这种情况。我警告说这是一个kludge,不是吗?此外,IDE将告诉您在编辑器外修改了文件,是否要重新加载它们。你可以说是的!