相关疑难解决方法(0)

Visual Studio 2010调试器中的上下文变量

对于面向.NET 4.0的C#控制台应用程序,Visual Studio 2010调试器中的局部变量脱离上下文,我遇到了一个非常奇怪的问题.我在SO上搜索过其他类似的问题,但有些问题有相同的症状,似乎没有一个直接适用于这个问题(它们似乎都有其他根本原因).

问题是,对于某些变量(但不是全部),我没有得到带有它们值的工具提示,它们没有出现在Locals窗口中,并且我得到"当前上下文中不存在名称'xyz'"如果我将它们添加到Watch窗口.它似乎影响了一些变量而不影响其他变量,我无法弄清楚一个模式(它似乎不是基于成员与本地,类与结构或任何其他区别).我已经重新启动了我的计算机和Visual Studio,验证了我是一个干净的Debug版本,确保调试框架是正确的,确保刷新监视屏幕中的变量,并尝试各种法术和咒语.

我在下面添加了一个屏幕截图(http://i.stack.imgur.com/JTFBT.png上的更大版本).

在此输入图像描述

有什么想法吗?

编辑:

添加一些其他信息:

问题是可重复的.即使在完全关闭并重新启动Visual Studio之后,完全相同的变量也可以工作或不起作用.这让我相信实际上存在系统性错误,而不仅仅是内存损坏或其他问题.

我还发现它似乎与try-catch块有关.如果我将断点放在try语句之外,我可以正常看到任何范围内的变量.一旦执行点进入try语句,try块之外的所有变量都将变得不可访问,我只能访问try语句中的变量.这几乎就像调试器将try块视为一个单独的方法一样(尽管你可以看到代码/编译器仍然可以访问范围内的变量).以前有人见过这种行为吗?

另一个编辑:

我(部分)收回了我所说的关于try-catch被怀疑的内容 - 似乎在代码的这一部分中,调试器展示了这个奇怪的东西在任何封闭块的上下文之外.例如,如果我在屏幕截图中的foreach语句中直接设置断点,我可以在每次迭代时看到"port"变量值,但是在foreach语句之外没有变量(一旦我进入foreach块就会消失) .然后,只要您进入try块,"port"变量就会突然消失.这变得非常奇怪.

此外,根据要求,整个方法的代码如下.

private void ConfigureAnnouncerSockets(XDocument configDocument)
{
    XElement socketsElement = configDocument.XPathSelectElement("/Configuration/Network/AnnouncerSockets");
    bool useDefault = true;
    if (socketsElement != null)
    {
        //Use the default announcers? (they will be added at the end)
        XAttribute defaultAttribute = socketsElement.Attribute("useDefault");
        if (defaultAttribute != null)
        {
            useDefault = Convert.ToBoolean(defaultAttribute);
        }

        //Get the default frequency
        int defaultFrequency = Announcer.DefaultFrequency;
        XAttribute frequencyAttribute = socketsElement.Attribute("frequency");
        if (frequencyAttribute != null)
        { …
Run Code Online (Sandbox Code Playgroud)

c# debugging visual-studio-2010 visual-studio

17
推荐指数
1
解决办法
4687
查看次数

标签 统计

c# ×1

debugging ×1

visual-studio ×1

visual-studio-2010 ×1