11

編集:基本的に必要なのは、デバッグを押したときにVisualStudioが常にすべてを再構築することです。


私は現在、ビジュアルスタジオを使用してアセンブリプログラムをコンパイルしています。MASMを使用しており、一般的には正常に機能しています。

しかし、私は厄介な問題に遭遇しました:

このようなファイル(たとえば、関数を含むファイル)を含めると

Include functions.inc

そしてそれをコンパイルすると、元々は正常に動作します。ただし、functions.incの内容を変更すると、これは認識されず、コンパイラーはfunctions.incをスキップして、変更前の古いバージョンを使用します。

これを修正するためのオプションがプロジェクトのプロパティの下に見つかりません。ただし、リンカーオプションなどと関係があると確信しています。プロジェクトのプロパティで変更を加えると(何かを変更して元に戻し、[OK]を押しても)、新しいバージョンの関数.inc。

何か案は?

4

5 に答える 5

8

EnvironmentEventsVisualStudioのマクロエクスプローラーのマクロを介して動作を変更できます。

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
于 2010-08-31T10:02:33.713 に答える
6

ConfigurationManagerでビルドするスタートアッププロジェクトを選択していることを確認してください。

ビルド->構成マネージャー->関連するすべてのプロジェクトの「ビルド」列を確認します。

于 2011-01-03T19:44:52.547 に答える
1

VSでのASMコードのサポートは、.NET / C ++ほど自動魔法ではなく、少し支援する必要があります。MAKEファイルを使用して、VSでASMコードをコンパイルします。MAKEファイルはすべての依存関係を定義するため、次にASMファイルがコンパイルされるときにINCファイルの変更がコンパイルされます。

同様のビルドスクリプトをMSBuildで作成することもできますが、そのために時間をかけたことはありません。

于 2010-03-04T04:16:18.797 に答える
1

1つの可能性は、単にすべてを再構築してからデバッガーを起動するマクロを作成することです。次に、マクロをキーにマップします。これには_DTE.ExecuteCommandを使用できると思います。また、デバッガーをさらに細かく制御したい場合は、Debugger2インターフェイスにかなりの機能が公開されています。

于 2010-03-05T13:16:47.250 に答える
0

VS IDEが依存関係を把握できないことが問題である場合(.asmファイルを解析してINCLUDEディレクティブを見つけることができないため)、MASMで非常にうまく機能するブルートフォースソリューションの1つは、プロジェクトを再構築することです。または解決策:MASMは非常に高速です:非常に大規模なMASMプロジェクトがいくつかあり、数十の.asmモジュールがあり、さらに多くのものが含まれています:このような最大のプロジェクトは(非常に)数秒で再構築されます。

警告:クラッジは前に二乗しました。すべての.asmファイルに影響を与えるプレビルドを定義すると、自動的に再構築が強制されます...

  1. プロジェクトのプロパティ(左の列、ソリューションエクスプローラー)を右クリックし、
  2. [構成のプロパティ]/[ビルドイベント]/[ビルド前のイベント]に移動します
  3. 「コマンドライン」に「touch*.asm」と入力します(パスにタッチユーティリティがあることを確認してください)

これで、ビルドするたびに、すべての* .asmファイルが変更されて(つまり、変更されたように見えて)再コンパイルされます。そして、これはとにかく起こるので、すべてを再構築する必要があることをもう覚えておく必要はありません。応急修理だと警告しましたね。さらに、IDEは、ファイルがエディターの外部で変更されたことを通知し、それらを再ロードしますか?はいと言えます!

于 2010-03-05T12:32:56.710 に答える