在Visual Studio 2008中,调试大约1-2分钟后,当我按F10(Step Over)时,调试器挂起,Visual Studio冻结5-10秒然后转到下一行。然后无论我做什么(F10,F5,F11等),调试器继续执行,好像我按下F5和我正在调试的所有表单关闭。我总是要重新启动应用程序。
很难重现,每次我想调试时都不会发生。有人有解决方案吗?
编辑:我已设法使用以下代码重现我的问题:
static void Main(string[] args)
{
XElement e = new XElement("root");
Test(e, 0);
}
static void Test(XElement parentElement, int i)
{
if (i < 1000)
{
XElement element = new XElement("element");
parentElement.Add(element);
Test(element, ++i);
}
}
您需要在“XElement element = new XElement(”element“);”行上放置一个条件断点。“条件“i == 999”。然后启动程序,等待2-3秒并将正常断点放在“parentElement.Add(element);”行上。现在VisualStudio冻结,无法调试。在WinForm应用程序中,它会关闭按F10后打开的所有表单。
但是我发现如果我在“工具 - &gt;选项 - &gt;调试”中禁用调试选项“在变量窗口中的对象上调用字符串转换函数”,我可以调试。它很慢,但至少VisualStudio不会冻结。有谁知道它为什么这样做?因为我不想禁用此选项,所以在没有它的情况下进行调试真的很烦人。
我还注意到,如果我只在main方法的末尾放置一个断点,那么与递归方法中的条件断点相比,代码运行得非常快。
答案 0 :(得分:4)
尝试删除存储调试/断点信息的解决方案用户选项文件(.suo)。您将丢失所有解决方案用户设置,例如断点位置。当你有“有趣的”调试事件时,这是首先尝试的,因为这个文件可能会被破坏。
如果这不能解决问题,那么您还会有其他事情发生,例如线程问题,过多的内存碎片,垃圾收集问题,处理/敲定问题等等。
答案 1 :(得分:3)
我在另一个Stackoverflow线程上找到了这个问题的答案。这个问题有一个MS hotfix。
答案 2 :(得分:1)
我发现每当我在符号目录列表中添加不存在的远程unc共享时,我就会这样减速。
尝试转到工具 - &gt; 选项 - &gt; 调试 - &gt; 符号并确保该列表中的所有目录确实存在。
我不知道这会如何导致你的程序在那之后继续。
答案 3 :(得分:0)
我不确定我是否遇到过这种情况,但如果我还是你,如果还没有,请删除你的bin文件夹,然后重建你的项目。然后运行一个干净的解决方案是安全的。有时,随着PDB的过时,可能会发生时髦的事情 - 所以你需要清除它们。
此外,如果您调用外部程序集,请将其删除并重新附加它们以确保您拥有最新的程序集。
答案 4 :(得分:0)
就像你描述的那样,我遇到了同样的问题。 MS Hotfix解决了这个问题,现在每当我进行全新的2008 VS安装时,我都会安装此修补程序。
答案 5 :(得分:0)
答案 6 :(得分:0)
我知道这是一个旧线程,但在我的情况下调试Excel加载项时会发生这种情况。
问题是我的断点是在后台线程中,在我的监视窗口中,我对Excel中的ActiveWorkbook进行了旧的检查。该调用就像许多其他调用一样,只能出现在Excel的主线程中。
一旦我取下那只手表,它再次调试就好了。