VS2008在遇到断点时暂停所有线程

时间:2010-05-18 14:33:04

标签: visual-studio-2008 debugging multithreading

我一定错过了什么......(我以前习惯使用eclipse)

当我遇到断点时,Visual Studio 2008似乎暂停所有线程 - 这是正常的吗?如果是这样,是否有一个选项只会暂停断点已经命中的线程?

2 个答案:

答案 0 :(得分:2)

是的,调试器完全正常。考虑如果没有会发生什么。调试器显示的任何值在显示时都必须被视为过时,因为任何其他正在运行的线程都可以从其下面更改值。

我不相信有一种方法可以在不停顿所有线程的情况下中断Visual Studio。

答案 1 :(得分:1)

正如Jared所说,这是VS中的正常行为。但是,您可以采取一些措施来调整行为,例如创建断点条件。我发现article提到设置断点条件以查找特定线程:

  

提示:仅当特定线程调用方法时才中断:要设置每线程断点,您需要唯一标识已为其Name属性指定名称的特定线程。您可以通过创建条件表达式为线程设置条件断点,例如“ThreadToStopOn”== Thread.CurrentThread.Name。

     

您可以通过观察变量“myThread”并在值窗口中为其输入Name值来手动更改Watch窗口中线程的名称。如果您没有要使用的当前线程变量,则可以使用Thread.CurrentThread.Name来设置当前线程的名称。 Thread类中还有一个私有整数变量DONT_USE_InternalThread,这对每个线程都是唯一的。您可以使用Threads窗口访问要停止的线程,并在Watch窗口中输入Thread.CurrentThread.DONT_USE_InternalThread以查看它的值,以便您可以创建正确的条件断点表达式。

以下是一些涉及破损条件的文章:

http://www.professionalvisualstudio.com/blog/2009/04/30/debugging-threads-in-visual-studio-with-breakpoint-conditions-and-actions/

http://www.blackwasp.co.uk/VSBreakpoints.aspx