问题:
每当我尝试在调试器中设置一个断点或跟踪点时,我们的应用程序和 Visual Studio 完全冻结。在分离调试器后,应用程序会继续运行。
这个问题可能与 WPF 相关。我们已经将我们的 WinForm 应用程序迁移到了 WPF。自那时以来,就出现了这个问题。但是我找不到导致问题的具体代码部分。我已经回退了数百个提交,但没有成功。
它可能也与 UI 线程有关。如果断点设置在远离 UI 逻辑的某个地方,应用程序将不会冻结,或者它在 UI 线程的某个地方冻结的频率不如其他地方那么高。
[编辑:]
我使用 Windows 7. 64位,安装了 Visual Studio 2010。
[更新:]
当 Visual Studio 挂起并且在显示断点之前尝试分离时,会显示消息 "无法从一个或多个进程分离。所有未完成的 func-evals 都尚未完成"。但是我已在调试选项中禁用了所有 func evaluation。 我认为我的问题是由于一个无法完成或超时的 func_evaluation 导致的。
有没有办法看到 Visual Studio 停在哪个 func_evaluation 上? 示例:
每当我尝试在调试器中设置一个断点或跟踪点时,我们的应用程序和 Visual Studio 完全冻结。在分离调试器后,应用程序会继续运行。
这个问题可能与 WPF 相关。我们已经将我们的 WinForm 应用程序迁移到了 WPF。自那时以来,就出现了这个问题。但是我找不到导致问题的具体代码部分。我已经回退了数百个提交,但没有成功。
它可能也与 UI 线程有关。如果断点设置在远离 UI 逻辑的某个地方,应用程序将不会冻结,或者它在 UI 线程的某个地方冻结的频率不如其他地方那么高。
[编辑:]
我使用 Windows 7. 64位,安装了 Visual Studio 2010。
[更新:]
当 Visual Studio 挂起并且在显示断点之前尝试分离时,会显示消息 "无法从一个或多个进程分离。所有未完成的 func-evals 都尚未完成"。但是我已在调试选项中禁用了所有 func evaluation。 我认为我的问题是由于一个无法完成或超时的 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 元素
可能存在的相关问题:
因为我们的应用程序使用 .NET Remoting 与另一个进程通信,我的问题可能类似于这里。我已经将所有注册到远程事件的操作放入了一个单独的任务中,但是没有成功。
来自被调试 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)
System.Windows.Threading.DispatcherTimer
(WPF计时器),而不是一般的C#计时器。虽然我不知道这是否能解决你的问题。 - sircodesalot