【问题标题】:How to breakall and continue on focus lost in Visual Studio 2017如何打破并继续关注 Visual Studio 2017 中丢失的焦点
【发布时间】:2018-03-19 22:04:03
【问题描述】:

我为我的 C++ 项目设置了编辑和继续功能,因此我可以执行中断、更改代码,然后继续查看我的代码的结果。 但是,如果我不必手动单击按钮会更好。我的第一个解决方案是使用 1 个按键来执行 BreakAll 和 Continue 功能。但是我没有找到仅使用 Visual Studio 2017 的答案。

然后我想到了一个更好的主意。如果编译后的 exe 失去焦点然后重新获得焦点以使其执行 BreakAll 然后继续,该怎么办? 或者另一种方法,它做同样的但更容易制作。是 Visual Studio 失去焦点的时候(因为我专注于编译的 exe)。它快速执行 BreakAll 然后继续。 这样我就可以编写代码并实时执行。

我的问题是这样的东西已经存在吗?我找不到答案。如果没有,是否有人知道是否可以进行扩展?还是有人愿意做?感谢阅读。

编辑: 这是一些伪代码。

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

编辑2: 好的,它可以通过一些帮助和示例脚本来工作。现在,当 Visual Studio 失去焦点时,它会保存并重新编译。和 BreaksAll 当它获得焦点时。 这是修改后的代码:

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

【问题讨论】:

  • 仅供参考,当您的应用程序运行时,支持 C++ 编辑并继续。因此,对于您的 C++ 项目,您可以修改您的代码,点击 Alt+F10(“应用代码更改”),这将(在幕后)打破所有,应用您的更改,然后继续。

标签: c++ visual-studio focus continue


【解决方案1】:

您应该能够使用我的 Visual Commander 扩展程序自动执行此任务。

关于如何捕捉 Visual Studio 失去焦点事件,请参阅 https://stackoverflow.com/a/33592923/84507

要检查 Visual Studio 当前是否正在调试,请使用:

if (DTE.Mode == vsIDEMode.vsIDEModeDebug)

要运行内置的 Visual Studio 命令,请使用:

DTE.ExecuteCommand("Debug.BreakAll");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多