如何让 Visual Studio 调试器在没有焦点的情况下中断

Posted

技术标签:

【中文标题】如何让 Visual Studio 调试器在没有焦点的情况下中断【英文标题】:How to get Visual Studio debugger to break without focus 【发布时间】:2016-04-27 18:18:33 【问题描述】:

我试图在我的(本机 C++)应用程序具有鼠标焦点时中断,通过切换到 Visual Studio 应用程序到 Ctrl-Alt-Break 或 Debug > Break All,我的应用程序不再做我正在尝试的事情继续。

例如,有没有办法让 Visual Studio 在 5 秒后中断?或者是否有某种调试 api,我可以编写脚本来触发 Break All,而无需将焦点切换到 Visual Studio 应用程序?

能够在没有焦点的情况下中断有助于poor man's profiling 并更好地理解与焦点相关的不熟悉代码。

【问题讨论】:

Visual Studio(尤其是 2015 年)有大量的分析工具,所以如果你的目标真的是进行分析,那么最好使用这些工具。 这是一个受支持的调试方案,您必须在另一台机器上运行应用程序并使用远程调试器。 你可以编辑你的断点的属性,也许你可以配置断点来做你想做的事情。 【参考方案1】:

有两种方法可以在不将鼠标焦点更改为 Visual Studio 的情况下中断:

    安装Remote Tools and debug from another machine,

    添加一个带有计时器的线程并在那里设置一个断点,例如将其添加到某处以每 5 秒中断一次:

    static bool debug_timer_started = false;
    if ( !debug_timer_started )
    
      debug_timer_started = true;
      std::thread([]
      
        static int seconds = 5;
        static bool keep_going = true;
        while ( keep_going )
        
          /* set break point on this line: */ std::this_thread::sleep_for(std::chrono::seconds(seconds));
        
      ).detach();
    
    

    您将需要这些标题:

    #include <thread>
    #include <chrono>
    

【讨论】:

以上是关于如何让 Visual Studio 调试器在没有焦点的情况下中断的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio:如何在修改成员变量时停止调试器?

调试时如何让 Visual Studio 保持在一个线程上?

如何让 Visual Studio 在调试时使用嵌入式源代码?

在调试模式下执行控制台应用程序后,如何让 Visual Studio 暂停?

如何让 std::pair<char *, char *> 在 Visual Studio 的调试器中显示为正确的字符串段?

如何在 Visual Studio 中仅调试一个线程 [重复]