我经常偶然发现代码需要花费太多时间让调试器评估屈服于以下恼人的错误:
功能评估已禁用,因为之前的功能评估已超时。您必须继续执行以重新启用功能评估。
通常我们可以通过进一步调整,使调试器线程snyc到我们的进程然后重新评估我们的语句来忽略它。
但是,当我将源代码附加到正在运行的托管进程时,我无法继续前进。一旦我得到提到的错误,根本没有断点,也不会“全部断开”让我打破执行并看到当前正在执行的语句。
黄线产生上述错误。但是,在继续之后没有断点,既不使用F10(“Step over”)也不使用F5(“Continue”)。在此之后,我完全无法在整个代码库中调试任何。
此外,当我尝试打破调试以查看当前正在执行的进程时,没有可用的源代码,也没有任何disambly信息,如下所示:
我有一些循环中逐个运行的方法。为了显示每个此类方法后的整个进度,我会通知BackGroundWorker
:
void RunTests()
{
foreach(var m in methods)
{
m.Invoke(...);
backgroundWorker1.ReportProgress(1);
}
}
private void InitializeComponent()
{
this.backgroundWorker1.WorkerReportsProgress = true;
this.backgroundWorker1.WorkerSupportsCancellation = true;
this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.RunTests);
}
行为发生在当前调用的方法中。我想这是因为BackGroundWorker
使用的另一个线程来通知UI的进度(在我的例子中是一个进度条),但这只是猜测。
有没有人有解释,甚至更好的解决方案,不需要重新开始这个过程(正如我注意到产生了完全相同的行为btw。)。
答案 0 :(得分:0)
这是因为异常是未处理的,并且Visual Studio在没有以某种方式处理的情况下无法移过该行。这是设计的 Continuing in the Visual Studio debugger after an exception occurs