当一个线程因断点而冻结时,是否可以让其他线程继续运行

时间:2014-08-07 13:54:16

标签: multithreading visual-studio debugging visual-studio-2012 breakpoints

我对调试过程和调试器的理解是,当一个断点被击中时,所有其他线程都被冻结。但是我的一位同事说这个选项是可配置的,这意味着你可以在Visual Studio选项的某个地方配置其他线程(没有断点)继续正常工作,尽管带有断点的线程被冻结。我无法在visual studio中找到任何此类设置,而且我的同事不记得他在哪里看到该设置,尽管他似乎非常确信这个选项存在。

当一个线程因断点而被冻结时,是否有人可以确认是否可以运行其他线程?如果有这样的设置,请告诉我在哪里找到它。

3 个答案:

答案 0 :(得分:5)

当断点命中时,调试器总是冻结所有线程。但是,当您按F5继续执行时,您可以控制线程发生的情况。您可以使用Debug + Windows + Threads调试器窗口中提供的Freeze工具栏按钮,以防止在按F5时线程继续。使用Thaw按钮重新启用它。

答案 1 :(得分:0)

我不知道这是否可能,但坦白说,如果是,那就不应该。是的,理论上可以打破一个线程,而其他线程继续运行,但请记住,有一个正在运行的线程将尝试与冻结的线程交互。这会导致当前冻结线程出现各种问题。我怀疑调试器的设计考虑到了这一点,因此没有允许这样的设置。如果其他人有不同的知识,请告诉我,因为我发现自己很好奇

答案 2 :(得分:0)

我不熟悉VS,但我知道自7.10版以来gdb支持非停止模式,所以我认为可以用VS做这样的事情。 以下是摘要:“对于某些多线程目标,GDB支持可选的操作模式,您可以在其中检查调试器中已停止的程序线程,而其他线程继续自由执行。这可以最大限度地减少调试实时系统(例如程序)时的入侵其中一些线程有实时约束或必须继续响应外部事件。这被称为不间断模式。“ 您可以搜索“不间断gdb”以获取更多详细信息。