【问题标题】:Visual Studio 2010 hangs on trace pointVisual Studio 2010 在跟踪点上挂起
【发布时间】:2013-02-07 15:54:39
【问题描述】:

问题:
每当我尝试在调试器中中断或设置跟踪点时,我们的应用程序和 Visual Studio 都会完全冻结。分离调试器后,应用程序继续运行。

此问题可能与 WPF 有关。我们已将 WinForm 应用程序迁移到 WPF。从那时起,这个问题就出现了。但我无法找到导致问题的代码的特定部分。我已经回滚了数百次提交,但没有成功。

它也可能与 UI 线程有关。如果断点设置在远离 UI 逻辑的某个位置,则应用程序将不会冻结,或者不会像在 UI 线程中的某个位置那样经常冻结。

[编辑:]
我使用 Windows 7. 64bit 和 Visual Studio 2010

[更新:]
当 Visual Studio 挂起并且我尝试在显示断点之前分离时,消息 “无法从一个或多个进程分离。所有未完成的 func-evals 尚未完成”。但是我在调​​试选项中禁用了所有功能评估。 我认为我的问题是由无法完成或超时的 func_evaluation 引起的。

有没有办法查看 Visual Studio 挂在哪个 func_evaluation 上?

示例:

class SomeUiViewPresenterExample
{
   private Timer m_Timer;

public void Init()
{
    m_Timer = new Timer();
    m_Timer.Elapsed += ElapsedFoo();
    m_Timer.AutoReset = false;
    m_Timer.Interval = 200;
}

private void ElapsedFoo(object sender, ElapsedEventArgs elapsedEventArgs)
{
    // there is no code inside this method
    // On the next line a trace point with "---> ElapsedFoo called" will freeze the debugger
}

我已经尝试过的:(没有成功)

  • 启用/禁用主机进程
  • 尝试调试 x86 和 x64 进程
  • 使用 /SafeMode 启动了 Visual Studio
  • NGEN 更新
  • 在调试选项中禁用“属性评估和其他隐式函数调用”
  • 禁用符号服务器
  • 禁用符号加载
  • 已删除 WPF 字体缓存
  • 用 'DebuggerDisplay("some text without expression")' 标记了几个 UI 元素

(Ticket Microsoft Connect)

可能相关的问题:

因为我们的应用程序使用 .NET Remoting 与另一个进程通信,所以我的问题类似于 here。我已将所有对远程事件的注册放在自己的任务中,但没有成功。

调试后的 Visual Studio 的调试器输出:

我已将调试器附加到 Visual Studio 并观察到一些异常,(80010005)

但我不知道它们是否与我的问题相关:

(18d8.1708): C++ EH exception - code e06d7363 (first chance)
(18d8.1708): C++ EH exception - code e06d7363 (first chance)
..... // snip
(18d8.18dc): **Unknown exception - code 80010005 (first chance)
..... // 20 seconds freeze until breakpoint hit in IDE

(18d8.18dc): Unknown exception - code 80010005 (first chance)
(18d8.18dc): C++ EH exception - code e06d7363 (first chance)
ModLoad: 365f0000 36665000 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\mcee.dll

// after continue execution debugger and debugged process freezes forever

(18d8.18dc): Unknown exception - code 80010005 (first chance)
ModLoad: 00000000`02b90000 00000000`02c1c000 C:\Windows\SysWOW64\UIAutomationCore.dll
(18d8.1a8c): CLR exception - code e0434352 (first chance)
(18d8.1a8c): CLR exception - code e0434352 (first chance)
(18d8.1a8c): CLR exception - code e0434352 (first chance)
(18d8.1a8c): CLR exception - code e0434352 (first chance)
(18d8.1a8c): CLR exception - code e0434352 (first chance)
(18d8.1a8c): CLR exception - code e0434352 (first chance)
(18d8.1a8c): CLR exception - code e0434352 (first chance)
(18d8.1a8c): CLR exception - code e0434352 (first chance)

【问题讨论】:

  • 只是一个小点。如果您使用的是 WPF,请使用 System.Windows.Threading.DispatcherTimer(WPF 计时器)而不是一般的 C# 计时器。不知道这是否会解决您的问题。
  • 感谢您的提示。但在这种情况下,操作不应在 UI 线程上执行。此操作应在单独的线程上运行,因为它只会更新数据上下文(需要一段时间)并触发属性更改事件。
  • Visual Studio 的哪个版本?
  • VisualStudio 2010 Win7 64bit

标签: c# wpf visual-studio debugging


【解决方案1】:

我越看这个,我越怀疑这是因为你没有使用 WPF 计时器。如果您尝试使用常规 Timer 类而不是 WPF Dispatcher 计时器,则可能会尝试在非 ui 线程上更新 UI - 这可能是您的问题的原因(因为 DataContext 是UI 技术上)。

更多信息在这里:

DispatcherTimer vs a regular Timer in WPF app for a task scheduler

【讨论】:

  • 不,我认为从非 UI 线程更新数据上下文是正确的。
  • 对,但是当您说:if (null != DataContext) 时,看起来您实际上是在点击 view.DataContext 属性,而不仅仅是数据上下文本身。试着把这条线拿出来看看会发生什么。
  • 或者尝试使用调度程序计时器,看看是否不能解决问题。您的代码可以保持几乎相同,只需将计时器的名称更改为 System.Windows.Threading.DispatcherTimer。如果最终出现这种情况,那么您仍然可以在另一个线程上执行代码,当您想要对 UI 对象进行最终更改时(即将执行移回主线程),您只需使用 Invoke .
  • 我已经用调度器定时器试过了。不幸的是没有成功。调试器仍然冻结。我还注释掉了计时器处理程序中的所有代码。只有一个仅打印一些文本的跟踪点,Visual Studio 仍然冻结
【解决方案2】:

您可以使用下面这个url中的windebug工具来更好地调试并整理出解决方案

http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx

【讨论】:

  • 谢谢,但是上面的输出已经被windbg捕获了。但我看不出任何对我有意义的东西。
【解决方案3】:

感谢您的提示。最后我安装了 VS 2012,调试器现在表现正常。 Visual Studio 2010 调试器中似乎确实存在错误/性能问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    相关资源
    最近更新 更多