【问题标题】:VS2008 Suspending all threads upon hitting breakpointVS2008 在遇到断点时暂停所有线程
【发布时间】:2010-05-18 14:33:04
【问题描述】:

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

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

【问题讨论】:

  • 好问题,我从没想过任何其他行为都是有意义的——但是当我在这个地方时,这将是一个很好的解决方案。

标签: visual-studio-2008 debugging multithreading


【解决方案1】:

是的,这对于调试器来说是完全正常的。考虑如果不这样做会发生什么。调试器显示的任何值在显示时都必须被视为已过期,因为任何其他正在运行的线程都可能会从它下面更改值。

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

【讨论】:

  • 我明白了 - 看起来我必须增加心跳超时..!谢谢
【解决方案2】:

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

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

您可以通过观察变量“myThread”并在值窗口中为其输入名称值来手动更改观察窗口中的线程名称。如果您没有要使用的当前线程变量,您可以使用 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

【讨论】:

    猜你喜欢
    • 2016-03-26
    • 2013-08-19
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    相关资源
    最近更新 更多