2013-07-16 74 views
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.

如何連接到另一個進程調試程序啓動權當?

+0

當您開始調試解決方案中的應用程序時,您想附加到已經運行的進程(這不在您的解決方案中)嗎?詢問是因爲您已經可以在同一解決方案中調試多個應用程序 - 請使用解決方案/啓動應用程序設置。 –

+0

解決方案中不是多個項目,而是我希望_IDE plugin_能夠在用戶啓動應用程序時附加。我有一個單獨的'ServiceMonitor'服務器來託管用戶的應用程序,因此我希望IDE在用戶開始調試時自動附加到該服務器上。 – sircodesalot

回答

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(); 
     } 
    } 

} 
相關問題