2

デバッガーがコードの使用を開始したときに、2 番目のプロセスにアタッチしようとしています。

DTE dte = BuildaPackage.VS_DTE;

EnvDTE.Process localServiceEngineProcess = dte.Debugger.LocalProcesses
    .Cast<EnvDTE.Process>()
    .FirstOrDefault(process => process.Name.Contains("ServiceMonitor"));

if (localServiceEngineProcess != null) {
    localServiceEngineProcess.Attach();
}

VS_DTE.Events.DebuggerEvents.OnEnterRunModeデバッガーが実行されていないときは問題なく動作しますが、イベント中にアタッチしようとすると、次のエラーが発生します。

A macro called a debugger action which is not allowed while responding to an event or while being run because a breakpoint was hit.

デバッガーの起動時に別のプロセスにアタッチするにはどうすればよいですか?

4

1 に答える 1

1

私はこれに対する答えを見つけました、それは私が考えるハックな解決策ですが、誰かがより良い答えを持ってきたら、私はそれを聞きたいです. 本質的には、デバッガーが実際に実行を開始する前に、デバッガーをアタッチします。検討:

internal class DebugEventMonitor {

    // DTE Events are strange in that if you don't hold a class-level reference
    // The event handles get silently garbage collected. Cool!
    private DTEEvents dteEvents;

    public DebugEventMonitor() {
        // Capture the DTEEvents object, then monitor when the 'Mode' Changes.
        dteEvents = DTE.Events.DTEEvents;                     
        this.dteEvents.ModeChanged += dteEvents_ModeChanged;
    }

    void dteEvents_ModeChanged(vsIDEMode LastMode) {
        // Attach to the process when the mode changes (but before the debugger starts).
        if (IntegrationPackage.VS_DTE.DTE.Mode == vsIDEMode.vsIDEModeDebug) {
            AttachToServiceEngineCommand.Attach();
        }
    }

}
于 2013-07-29T15:11:18.370 に答える