2017-10-08 201 views
-2

我得到了編輯並繼續爲我的C++項目設置功能,以便我可以執行breakall,更改代碼,然後繼續查看我的代碼的結果。 但是,如果我不必手動點擊按鈕會更好。我的第一個解決方案是使用1個按鍵執行BreakAll,然後執行Continue功能。不過,我沒有找到一個答案,只使用Visual Studio 2017.如何在Visual Studio 2017中丟失並繼續失去焦點

然後,我來了一個更好的主意。如果編譯好的exe文件失去焦點,然後重新獲得焦點,則執行BreakAll然後繼續。 或者做一個相同但更容易製作的替代方法。是什麼時候Visual Studio失去了重點(因爲我專注於編譯的exe)。它快速執行BreakAll,然後繼續。 這會讓我編寫代碼並實時執行它。

我的問題是這樣的事情已經存在嗎?我找不到答案。如果沒有人有一個想法,如果這是可以做一個擴展?還是有人願意做出來?謝謝閱讀。編輯: 這是一些僞代碼。

if compiled_build_running == true && lost_focus == true { 
    Debug.BreakAll 
    Debug.Continue 
} 

EDIT2: 好吧得到了它的一些幫助和示例腳本。它現在在視覺工作室失去重點時保存並重新編譯。當它獲得焦點時,它將全部崩潰。 下面是修改代碼:

using EnvDTE; 
using EnvDTE80; 

public class E : VisualCommanderExt.IExtension 
{ 
    public void SetSite(EnvDTE80.DTE2 DTE_, Microsoft.VisualStudio.Shell.Package package) { 
    DTE = DTE_; 
    System.Windows.Application.Current.Deactivated += OnDeactivated; 
    System.Windows.Application.Current.Activated += OnActivated; 
} 

public void Close() { 
    System.Windows.Application.Current.Deactivated -= OnDeactivated; 
    System.Windows.Application.Current.Activated -= OnActivated; 
} 

private void OnDeactivated(object sender, System.EventArgs e) { 
    try { 
     DTE.ExecuteCommand("File.SaveAll"); 
    } catch (System.Exception ex) { 
    } 
    if (DTE.Mode == vsIDEMode.vsIDEModeDebug) { 
     DTE.ExecuteCommand("Debug.Start"); 
    } 
} 

private void OnActivated(object sender, System.EventArgs e) { 

    if (DTE.Mode == vsIDEMode.vsIDEModeDebug) { 
     DTE.ExecuteCommand("Debug.BreakAll"); 
    } 

} 

private EnvDTE80.DTE2 DTE; 
} 
+0

僅供參考,C++編輯並繼續支持你的應用程序運行時。因此,對於您的C++項目,您可以修改代碼,按Alt + F10(「應用代碼更改」),這將會(在封面下)全部破解,應用您的更改並繼續。 – Ramkumar

回答

0

你應該能夠使用我的Visual Commander擴展自動完成這一任務。

關於如何捕捉Visual Studio失去焦點事件,請參閱https://stackoverflow.com/a/33592923/84507

要檢查的Visual Studio正在調試使用:

if (DTE.Mode == vsIDEMode.vsIDEModeDebug) 

要運行內置Visual Studio的命令使用方法:

DTE.ExecuteCommand("Debug.BreakAll"); 
+0

謝謝你的工作很好,我修改了一下代碼 – StackingLua