在Visual Studio中添加没有完整命名空间的监视

Com*_*ser 6 c# debugging visual-studio visual-studio-debugging visual-studio-2012

我通过从代码中复制代码并将其添加到监视窗口,在运行时从代码中添加代码片段以观察窗口.如果代码包含.NET的默认命名空间(如System.IO,System.Xml等)的Convert.ToString(),XMLDocument.Load(),File.Write()等方法,则会出现错误: "转换"这个名称在当前上下文中不存在"但是当我在监视窗口中为添加的代码片段添加完整的命名空间时,它不会出错,例如:System.Convert.ToString(123)给出正确的值.我的程序代码在调用任何.NET框架方法之前没有完整的命名空间,因为如果我在任何方法调用之前添加命名空间,那么使用"using"关键字在每个文件的顶部添加命名空间的用途是什么.如果我在文件中的代码上方添加命名空间,那么在方法调用之前,我不必在该文件的代码中添加整个命名空间.除了每次将代码复制到监视列表时在监视窗口中添加完整命名空间,我还能做些什么,以便监视不会出错.请看下面的截图: 在此输入图像描述

更新:我在监视列表中添加方法以在执行之前检查方法的结果.它确保方法执行不会在执行时产生任何错误或异常,并且我可以编辑代码,因为该方法实际上并未在程序的代码执行中执行.我在该方法的调用代码上设置了一个断点,并首先在监视窗口中添加该代码以检查是否有任何错误,因为如果我不这样做,那么我必须重新运行整个程序以更正下一个值时间.

Dav*_*ray 1

调试器使用当前指令指针所在的上下文(源窗口左侧的黄色小箭头)来尝试评估函数。

因此,如果您停止的代码行有“using System;” 在文件顶部,您应该能够在监视窗口中键入 Convert.ToInt32(123)。如果您所在的其他文件没有使用该名称,则必须完全限定该名称。

我用以下测试用例尝试了这一点:

// Main.cs
using System;
namespace TestCon
{
    class Program
    {
        static void Main(string[] args)
        {
            Foo foo = new Foo();

            Console.WriteLine(Convert.ToString(123));
            Console.WriteLine(Convert.ToInt32("234"));
        }
    }
}

//Foo.cs (note that there are no using statements in this file)
namespace TestCon
{
    class Foo
    {
       public Foo()
       { }
    }  
}
Run Code Online (Sandbox Code Playgroud)

如果我单步执行到 main.cs 文件中的任何一点,我可以将 Convert 表达式复制到监视窗口,而无需使用系统命名空间限定符,并且它们将进行计算。如果我在 Foo() 构造函数中进入(或运行到断点),则会收到“名称‘Convert’在当前上下文中不存在”错误,除非我将系统命名空间限定符添加到开头。

注意:即使可以计算表达式,您最终也必须频繁地点击刷新按钮(监视窗口右侧附近的圆圈中的两个箭头),因为调试器无法判断对 CLR 的调用是否会导致副作用影响。

希望有帮助。