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

Multithreading 如何使Visual Studio在调试时保持在一个线程上?,multithreading,visual-studio,debugging,visual-studio-debugging,Multithreading,Visual Studio,Debugging,Visual Studio Debugging,当我在VisualStudio中调试时,由于某种原因,当调试某个线程时,VisualStudio将跳转到不同的线程 如何更改行为,使其位于同一线程上 通常,我通过右键单击threads面板冻结其他线程。我不知道这是否合理。这是默认设置,因为我认为在调试器中运行程序不会改变程序的结果 当程序运行“实时”时,它会不断地在线程之间切换,因此如果调试器不这样做,程序的行为就会不同 在任何情况下,我所知道的防止它的唯一方法是打开“线程”窗口,右键单击当前线程以外的所有其他线程,然后选择“冻结”。(请记住以

当我在VisualStudio中调试时,由于某种原因,当调试某个线程时,VisualStudio将跳转到不同的线程


如何更改行为,使其位于同一线程上

通常,我通过右键单击threads面板冻结其他线程。我不知道这是否合理。

这是默认设置,因为我认为在调试器中运行程序不会改变程序的结果

当程序运行“实时”时,它会不断地在线程之间切换,因此如果调试器不这样做,程序的行为就会不同

在任何情况下,我所知道的防止它的唯一方法是打开“线程”窗口,右键单击当前线程以外的所有其他线程,然后选择“冻结”。(请记住以后再次解冻它们)

当您说“调试某个线程时,visual studio将随机跳转到不同的线程”,您的意思是当您在特定线程上单步执行代码时,可能会遇到不同线程上的断点吗

如果是这样,您可以使用线程窗口“冻结”除您感兴趣的调试线程以外的其他线程:

发件人:

在“线程”窗口中,可以设置 活动线程。此外,你 可以冻结或解冻执行 每个单独的线程。冰冻的 防止执行线程。 解冻使其能够继续。两个 垂直的蓝色条表示冻结状态 线


对此的支持可能取决于您拥有的Visual Studio版本(例如,我认为Express版本不支持线程窗口)。

这里的所有答案都是关于冻结线程的,但是如果线程太多,并且您不知道冻结哪一个线程,这会变得很麻烦。我发现了一个更简单的把戏


当一个断点被线程i击中,并说jk等将在一段时间内击中相同的断点,然后临时禁用断点并开始调试线程i。我看到调试器没有跳转到其他线程,因为对于这些线程,没有断点可以突破。完成调试后启用断点。

这很有意义。。。但这并不能改变一个事实,那就是它非常烦人如果MS添加了一个配置选项,以便在遇到断点时保持在当前线程内,这将有助于调试。。。这样,就可以调试当时正在执行的逻辑,而不必在使用冻结线程调试程序时遇到麻烦和相关的延迟。我并不反对,但一个明显的反对论点是,在调试时,您也没有使用实际的生产应用程序,因为您可能还没有在上编译优化的调试版本应用程序。如果您正在寻找一个逻辑问题,那么更好地控制调试器远比学究式的正确更有用。在调试过程中,当遇到断点时,我会进入线程窗口,冻结所有线程,只解冻当前线程。这样,我只能继续调试正在处理的线程。对于找不到此窗口的用户,请转到工具栏>调试>窗口>线程(或
Ctrl+Alt+H
)。从那里你可以右键点击一个线程并冻结/解冻它。。。