在日常的编程中,程序员经常离不开的工作之一,就是调试。当写好一段代码或程序后,在运行后总会出现这样那样的问题,比如各样的错误,程序员就必须进行调试,将这些错误排除。在最新出炉的Visual Studio 2005中,将提供十分强大而方便的调试功能,从而使程序员能节约时间,提高工作效率。本文中,将主要介绍Visual Studio 2005 在调试方面新增加的几个重要功能,并介绍它们的简单用法。
  
  Edit and Contiue功能

  在调试程序的时候,经常会遇到这样的情况:在调试一大段代码时,遇到了一个小的错误,比如参数的赋值错误了,这时候,往往希望能够马上将这些小的错误改正过来后,能够继续调试跟踪下去,而不用结束整个调试过程去修改。在Visual Studio 2003中,我们必须停止当前的调试,修改错误的地方,再重新编译,这样十分不方便。在Visual Studio 2005 中,提供了一个新的功能叫"edit and continue",意思是说,当你在调试时,遇到小的错误需要马上修改后,可以进行编辑修改,然后继续往下调试,不需要结束整个调试的过程,当你修改后,调试器在后台进行了自动的编译,并且会执行新修改的代码,十分方便。下面举个例子进行说明。

  打开Visual Studio 2005,使用c#建立一个winform窗体应用程序,在窗体中添加一个label标签,一个文本框,一个按钮,如下图所示,我们要实现的功能是,在文本框输入一些信息后,点按钮,会弹出一个消息框,显示的是刚才输入的信息。

假如我们编写的代码如下所示,出现了一个小错误,把textbox1.text的内容当作字符串的一部分了,所以显示不出用户输入的信息。

private void button1_Click(object sender, EventArgs e)
{
 //Show welcome message
 MessageBox.Show("Welcome textbox1.Text to Edit and Continue.");
}

现在,如果我们在调试时遇到了这个错误,则可以使用edit and continue功能来进行改正。

  首先,按F7切换到代码视图,在MessageBox.Show这一行设置断点,之后按F5运行程序,当在文本框输入字符串时,由于设置了中断,光标停留在messagebox.show这行上,这时,我们可以修改代码,修改为:

private void button1_Click(object sender, EventArgs e)
{
 MessageBox.Show("Welcome " + textbox1.Text +" to Edit and Continue.");
}

  修改完后,继续按F5运行,这时候,则会显示正确的结果了,如下图,而不需要使用以往的"stop debugging"的功能先停止调试再修改程序。

可视化调试器(Debugging Visualizers)

  在调试的时候,我们遇到的一个很麻烦的问题,就是有的时候很难看到某些参数的值。比如当你设置了一个断点去监测一个dataset,并且想看dataset里的每个datatable的数据,这在Visual Studio 2003中,是十分麻烦的,必须在auto/locals的监视窗口中,一层层地展开去看其值。在Visual Studio 2005中,为解决这个问题,新增加了叫"debugging visualizers"(可视化调试器)的功能,该功能可以在调试状态时,很容易方便地以各类形式,比如文本,html,xml等方式查看各种参数。

  在各类的监视窗口中,比如在autos,locals,watch和quickwatch 中都可以调用可视化调试器,方法是在某个需要监视的参数旁边,点击那个放大镜图标,就可以在打开的可视化调试器中看到该参数的详细情况,如下图所示:
  
     利用可视化调试器,就可以很方便地查看比如dataset类型的数据,如下图所示:

Data Tips

  在Visual Studio 2005中,在调试方面,还新增了"data tips(数据提示)"的功能。当在调试程序期间,只需要将光标移到代码中某个需要监视的参数上,系统就会自动显示与该参数相关联的一些很有用的信息,比如相关的属性,以及当前该参数的值。在Visual Studio 2003中,也有该功能,但提供的信息比现在的2005少很多。

  我们依然以上面"edit and continue"使用的例子来说明。我们将断点设在MessageBox.Show这一行,F5运行程序,当在文本框输入文字并按确定按钮后,程序自动中断,这时,将光标移到textbox1.text这个位置,系统就会调用data tips功能,如下图所示显示出与textbox文本框控件相关的一些属性以及这些属性此时对应的值。

在data tip的功能中,还可以继续使用edit and continue的功能,只需要在需要的地方鼠标右键就可以弹出如下图的菜单,可以编辑该值。

Exception Assistant(异常助手)

  在Visual Studio .net 2003中,当程序运行出现异常时,系统会显示一个异常信息对话框,询问是否停止程序执行或继续运行程序,但并没有提供给开发者更多的关于异常的信息。在Visual Studio .net 2005中,提供了 Exception Assistant(异常助手)的新功能,可以显示丰富的关于异常方面的信息,帮助开发者调试,如下图
  
   
   在上图中,显示的是一个sqlException,是由于超时连接而造成的。在异常助手的窗口中,显示了关于该异常的详细信息,还可以将这些信息复制到剪贴版中,当选择view detail时,会弹出如下图所示的窗口,进一步显示关于该异常的详细信息
  
     Just My Code Debugging

  在调试代码中,我们经常会遇到这样的问题,有时我们引用了一些其他工具包或者类库(如Microsoft提供的Enterprise Library),而在调试时,我们其实是不需要跟踪调试这些代码的,因为它们都已经证明是正确的。在Visual Studio 2003中,处理这类问题我们的方法一般是使用F10跳过它们,但一旦工程庞大的话,这样做十分麻烦。在Visual Studio 2005中,新增加了Just My Code debugging(JMC)的新特性,可以让开发者自己定制哪些代码是需要调试,哪些代码是永远不需要调试的,这样可以节省大量的时间。

  JMC功能由两方面来实现。首先,如果一个工程是以release方式进行编译构建的话(就是工程中,没有pdb文件),调试器会将其认为是非用户代码,那么在调试运行时,就根本不会进入该工程中进行调试。其次,可以使用System.Diagnostics命名空间里的DebuggerNonUserCodeAttribute属性,将其应用在希望不进行调试的代码段中。

  下面举一个例子来说明。下面的代码段中,有两个静态方法UserCode()和NonUserCode(),其中,在NonUserCode()中,是应用了DebuggerNonUserCode的属性,这表明这段代码将在调试运行时,调试器不会进入其中。将断点设置在其中的第9行,运行程序,程序会在第一个UserCode()里中断,现在试着用F11继续单步跟踪,会发现系统在进入usercode()方法中运行后,并没有进入到NonUserCode()里运行。

using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
// Step into F11 from here
UserCode();// Place break point on this line
NonUserCode();
UserCode();
}
static void UserCode()
{
Console.WriteLine("This is a call from user Code");
}
// Attribute to indicate the Debugger to jump
// over this method
[DebuggerNonUserCode]
static void NonUserCode()
{
Console.WriteLine("This is a call fron Non User Code");
}
}

编辑时对象识别

  在Visual Studio 2005中,新引入了"Object Identity While Debugging"的概念,也就是说,系统给在调试阶段的每个对象,都可以赋予一个别名,在调试时,直接引用该别名就可以了。

  假设在调试的时候,需要跟踪比如dataset或者hashtable等对象,这些对象中包含了很多其他的子对象,如果想对这些数量众多的子对象进行跟踪的话,将十分麻烦。在Visual Studio 2005中,可以使用object identity(对象标识)的方法去标记每一个对象,

  比如,在一个windows应用程序中,创建了一个dataset,并将其绑定到datagridview中去。如将sql server 的northwind数据库中的orders和orderdetail表中的数据读出填充到dataset里去,则在调试时,设置一个断点放在dataset里填充了数据之后的那行,这时,在监视窗口中,鼠标展开this.northwindData这个dataset,如下图所示,找到orders这个table,然后鼠标右键,会弹出一个菜单,选择其中的" Make Object ID".

这时,会将orders这个参数以1#的别名方式命名(见下图),并且在整个应用程序中,只要在dataset的生存期,都可以以1#的方式访问它。

下图的代码演示了如何在immediate监视窗口中,通过使用object 标识,查看某一个表中所有记录的方法。要注意的是,必须将其显式类型转换为DataApp.NorthwidDataSet.OrdersDataTable。通过使用object 标识的好处是,可以在调试阶段,不需要在描述某个参数时,再用冗余的命名方法表示了(比如可以用#1来代替this.NorthwidDataSet.Orders)
   最近学习asp.net 2.0时新编译修改的一篇文章,原文发表在http://dev.yesky.com/msdn/359/2195359.shtml上,现转到这里。
   在日常的编程中,程序员经常离不开的工作之一,就是调试。当写好一段代码或程序后,在运行后总会出现这样那样的问题,比如各样的错误,程序员就必须进行调试,将这些错误排除。在最新出炉的Visual Studio 2005中,将提供十分强大而方便的调试功能,从而使程序员能节约时间,提高工作效率。本文中,将主要介绍Visual Studio 2005 在调试方面新增加的几个重要功能,并介绍它们的简单用法。
  
  Edit and Contiue功能

  在调试程序的时候,经常会遇到这样的情况:在调试一大段代码时,遇到了一个小的错误,比如参数的赋值错误了,这时候,往往希望能够马上将这些小的错误改正过来后,能够继续调试跟踪下去,而不用结束整个调试过程去修改。在Visual Studio 2003中,我们必须停止当前的调试,修改错误的地方,再重新编译,这样十分不方便。在Visual Studio 2005 中,提供了一个新的功能叫"edit and continue",意思是说,当你在调试时,遇到小的错误需要马上修改后,可以进行编辑修改,然后继续往下调试,不需要结束整个调试的过程,当你修改后,调试器在后台进行了自动的编译,并且会执行新修改的代码,十分方便。下面举个例子进行说明。

  打开Visual Studio 2005,使用c#建立一个winform窗体应用程序,在窗体中添加一个label标签,一个文本框,一个按钮,如下图所示,我们要实现的功能是,在文本框输入一些信息后,点按钮,会弹出一个消息框,显示的是刚才输入的信息。

假如我们编写的代码如下所示,出现了一个小错误,把textbox1.text的内容当作字符串的一部分了,所以显示不出用户输入的信息。

private void button1_Click(object sender, EventArgs e)
{
 //Show welcome message
 MessageBox.Show("Welcome textbox1.Text to Edit and Continue.");
}

现在,如果我们在调试时遇到了这个错误,则可以使用edit and continue功能来进行改正。

  首先,按F7切换到代码视图,在MessageBox.Show这一行设置断点,之后按F5运行程序,当在文本框输入字符串时,由于设置了中断,光标停留在messagebox.show这行上,这时,我们可以修改代码,修改为:

private void button1_Click(object sender, EventArgs e)
{
 MessageBox.Show("Welcome " + textbox1.Text +" to Edit and Continue.");
}

  修改完后,继续按F5运行,这时候,则会显示正确的结果了,如下图,而不需要使用以往的"stop debugging"的功能先停止调试再修改程序。

可视化调试器(Debugging Visualizers)

  在调试的时候,我们遇到的一个很麻烦的问题,就是有的时候很难看到某些参数的值。比如当你设置了一个断点去监测一个dataset,并且想看dataset里的每个datatable的数据,这在Visual Studio 2003中,是十分麻烦的,必须在auto/locals的监视窗口中,一层层地展开去看其值。在Visual Studio 2005中,为解决这个问题,新增加了叫"debugging visualizers"(可视化调试器)的功能,该功能可以在调试状态时,很容易方便地以各类形式,比如文本,html,xml等方式查看各种参数。

  在各类的监视窗口中,比如在autos,locals,watch和quickwatch 中都可以调用可视化调试器,方法是在某个需要监视的参数旁边,点击那个放大镜图标,就可以在打开的可视化调试器中看到该参数的详细情况,如下图所示:
  
     利用可视化调试器,就可以很方便地查看比如dataset类型的数据,如下图所示:

Data Tips

  在Visual Studio 2005中,在调试方面,还新增了"data tips(数据提示)"的功能。当在调试程序期间,只需要将光标移到代码中某个需要监视的参数上,系统就会自动显示与该参数相关联的一些很有用的信息,比如相关的属性,以及当前该参数的值。在Visual Studio 2003中,也有该功能,但提供的信息比现在的2005少很多。

  我们依然以上面"edit and continue"使用的例子来说明。我们将断点设在MessageBox.Show这一行,F5运行程序,当在文本框输入文字并按确定按钮后,程序自动中断,这时,将光标移到textbox1.text这个位置,系统就会调用data tips功能,如下图所示显示出与textbox文本框控件相关的一些属性以及这些属性此时对应的值。

在data tip的功能中,还可以继续使用edit and continue的功能,只需要在需要的地方鼠标右键就可以弹出如下图的菜单,可以编辑该值。

Exception Assistant(异常助手)

  在Visual Studio .net 2003中,当程序运行出现异常时,系统会显示一个异常信息对话框,询问是否停止程序执行或继续运行程序,但并没有提供给开发者更多的关于异常的信息。在Visual Studio .net 2005中,提供了 Exception Assistant(异常助手)的新功能,可以显示丰富的关于异常方面的信息,帮助开发者调试,如下图
  
   
   在上图中,显示的是一个sqlException,是由于超时连接而造成的。在异常助手的窗口中,显示了关于该异常的详细信息,还可以将这些信息复制到剪贴版中,当选择view detail时,会弹出如下图所示的窗口,进一步显示关于该异常的详细信息
  
     Just My Code Debugging

  在调试代码中,我们经常会遇到这样的问题,有时我们引用了一些其他工具包或者类库(如Microsoft提供的Enterprise Library),而在调试时,我们其实是不需要跟踪调试这些代码的,因为它们都已经证明是正确的。在Visual Studio 2003中,处理这类问题我们的方法一般是使用F10跳过它们,但一旦工程庞大的话,这样做十分麻烦。在Visual Studio 2005中,新增加了Just My Code debugging(JMC)的新特性,可以让开发者自己定制哪些代码是需要调试,哪些代码是永远不需要调试的,这样可以节省大量的时间。

  JMC功能由两方面来实现。首先,如果一个工程是以release方式进行编译构建的话(就是工程中,没有pdb文件),调试器会将其认为是非用户代码,那么在调试运行时,就根本不会进入该工程中进行调试。其次,可以使用System.Diagnostics命名空间里的DebuggerNonUserCodeAttribute属性,将其应用在希望不进行调试的代码段中。

  下面举一个例子来说明。下面的代码段中,有两个静态方法UserCode()和NonUserCode(),其中,在NonUserCode()中,是应用了DebuggerNonUserCode的属性,这表明这段代码将在调试运行时,调试器不会进入其中。将断点设置在其中的第9行,运行程序,程序会在第一个UserCode()里中断,现在试着用F11继续单步跟踪,会发现系统在进入usercode()方法中运行后,并没有进入到NonUserCode()里运行。

using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
// Step into F11 from here
UserCode();// Place break point on this line
NonUserCode();
UserCode();
}
static void UserCode()
{
Console.WriteLine("This is a call from user Code");
}
// Attribute to indicate the Debugger to jump
// over this method
[DebuggerNonUserCode]
static void NonUserCode()
{
Console.WriteLine("This is a call fron Non User Code");
}
}

编辑时对象识别

  在Visual Studio 2005中,新引入了"Object Identity While Debugging"的概念,也就是说,系统给在调试阶段的每个对象,都可以赋予一个别名,在调试时,直接引用该别名就可以了。

  假设在调试的时候,需要跟踪比如dataset或者hashtable等对象,这些对象中包含了很多其他的子对象,如果想对这些数量众多的子对象进行跟踪的话,将十分麻烦。在Visual Studio 2005中,可以使用object identity(对象标识)的方法去标记每一个对象,

  比如,在一个windows应用程序中,创建了一个dataset,并将其绑定到datagridview中去。如将sql server 的northwind数据库中的orders和orderdetail表中的数据读出填充到dataset里去,则在调试时,设置一个断点放在dataset里填充了数据之后的那行,这时,在监视窗口中,鼠标展开this.northwindData这个dataset,如下图所示,找到orders这个table,然后鼠标右键,会弹出一个菜单,选择其中的" Make Object ID".

这时,会将orders这个参数以1#的别名方式命名(见下图),并且在整个应用程序中,只要在dataset的生存期,都可以以1#的方式访问它。

下图的代码演示了如何在immediate监视窗口中,通过使用object 标识,查看某一个表中所有记录的方法。要注意的是,必须将其显式类型转换为DataApp.NorthwidDataSet.OrdersDataTable。通过使用object 标识的好处是,可以在调试阶段,不需要在描述某个参数时,再用冗余的命名方法表示了(比如可以用#1来代替this.NorthwidDataSet.Orders)
   最近学习asp.net 2.0时新编译修改的一篇文章,原文发表在http://dev.yesky.com/msdn/359/2195359.shtml上,现转到这里。
   在日常的编程中,程序员经常离不开的工作之一,就是调试。当写好一段代码或程序后,在运行后总会出现这样那样的问题,比如各样的错误,程序员就必须进行调试,将这些错误排除。在最新出炉的Visual Studio 2005中,将提供十分强大而方便的调试功能,从而使程序员能节约时间,提高工作效率。本文中,将主要介绍Visual Studio 2005 在调试方面新增加的几个重要功能,并介绍它们的简单用法。
  
  Edit and Contiue功能

  在调试程序的时候,经常会遇到这样的情况:在调试一大段代码时,遇到了一个小的错误,比如参数的赋值错误了,这时候,往往希望能够马上将这些小的错误改正过来后,能够继续调试跟踪下去,而不用结束整个调试过程去修改。在Visual Studio 2003中,我们必须停止当前的调试,修改错误的地方,再重新编译,这样十分不方便。在Visual Studio 2005 中,提供了一个新的功能叫"edit and continue",意思是说,当你在调试时,遇到小的错误需要马上修改后,可以进行编辑修改,然后继续往下调试,不需要结束整个调试的过程,当你修改后,调试器在后台进行了自动的编译,并且会执行新修改的代码,十分方便。下面举个例子进行说明。

  打开Visual Studio 2005,使用c#建立一个winform窗体应用程序,在窗体中添加一个label标签,一个文本框,一个按钮,如下图所示,我们要实现的功能是,在文本框输入一些信息后,点按钮,会弹出一个消息框,显示的是刚才输入的信息。

假如我们编写的代码如下所示,出现了一个小错误,把textbox1.text的内容当作字符串的一部分了,所以显示不出用户输入的信息。

private void button1_Click(object sender, EventArgs e)
{
 //Show welcome message
 MessageBox.Show("Welcome textbox1.Text to Edit and Continue.");
}

现在,如果我们在调试时遇到了这个错误,则可以使用edit and continue功能来进行改正。

  首先,按F7切换到代码视图,在MessageBox.Show这一行设置断点,之后按F5运行程序,当在文本框输入字符串时,由于设置了中断,光标停留在messagebox.show这行上,这时,我们可以修改代码,修改为:

private void button1_Click(object sender, EventArgs e)
{
 MessageBox.Show("Welcome " + textbox1.Text +" to Edit and Continue.");
}

  修改完后,继续按F5运行,这时候,则会显示正确的结果了,如下图,而不需要使用以往的"stop debugging"的功能先停止调试再修改程序。

可视化调试器(Debugging Visualizers)

  在调试的时候,我们遇到的一个很麻烦的问题,就是有的时候很难看到某些参数的值。比如当你设置了一个断点去监测一个dataset,并且想看dataset里的每个datatable的数据,这在Visual Studio 2003中,是十分麻烦的,必须在auto/locals的监视窗口中,一层层地展开去看其值。在Visual Studio 2005中,为解决这个问题,新增加了叫"debugging visualizers"(可视化调试器)的功能,该功能可以在调试状态时,很容易方便地以各类形式,比如文本,html,xml等方式查看各种参数。

  在各类的监视窗口中,比如在autos,locals,watch和quickwatch 中都可以调用可视化调试器,方法是在某个需要监视的参数旁边,点击那个放大镜图标,就可以在打开的可视化调试器中看到该参数的详细情况,如下图所示:
  
     利用可视化调试器,就可以很方便地查看比如dataset类型的数据,如下图所示:

Data Tips

  在Visual Studio 2005中,在调试方面,还新增了"data tips(数据提示)"的功能。当在调试程序期间,只需要将光标移到代码中某个需要监视的参数上,系统就会自动显示与该参数相关联的一些很有用的信息,比如相关的属性,以及当前该参数的值。在Visual Studio 2003中,也有该功能,但提供的信息比现在的2005少很多。

  我们依然以上面"edit and continue"使用的例子来说明。我们将断点设在MessageBox.Show这一行,F5运行程序,当在文本框输入文字并按确定按钮后,程序自动中断,这时,将光标移到textbox1.text这个位置,系统就会调用data tips功能,如下图所示显示出与textbox文本框控件相关的一些属性以及这些属性此时对应的值。

在data tip的功能中,还可以继续使用edit and continue的功能,只需要在需要的地方鼠标右键就可以弹出如下图的菜单,可以编辑该值。

Exception Assistant(异常助手)

  在Visual Studio .net 2003中,当程序运行出现异常时,系统会显示一个异常信息对话框,询问是否停止程序执行或继续运行程序,但并没有提供给开发者更多的关于异常的信息。在Visual Studio .net 2005中,提供了 Exception Assistant(异常助手)的新功能,可以显示丰富的关于异常方面的信息,帮助开发者调试,如下图
  
   
   在上图中,显示的是一个sqlException,是由于超时连接而造成的。在异常助手的窗口中,显示了关于该异常的详细信息,还可以将这些信息复制到剪贴版中,当选择view detail时,会弹出如下图所示的窗口,进一步显示关于该异常的详细信息
  
     Just My Code Debugging

  在调试代码中,我们经常会遇到这样的问题,有时我们引用了一些其他工具包或者类库(如Microsoft提供的Enterprise Library),而在调试时,我们其实是不需要跟踪调试这些代码的,因为它们都已经证明是正确的。在Visual Studio 2003中,处理这类问题我们的方法一般是使用F10跳过它们,但一旦工程庞大的话,这样做十分麻烦。在Visual Studio 2005中,新增加了Just My Code debugging(JMC)的新特性,可以让开发者自己定制哪些代码是需要调试,哪些代码是永远不需要调试的,这样可以节省大量的时间。

  JMC功能由两方面来实现。首先,如果一个工程是以release方式进行编译构建的话(就是工程中,没有pdb文件),调试器会将其认为是非用户代码,那么在调试运行时,就根本不会进入该工程中进行调试。其次,可以使用System.Diagnostics命名空间里的DebuggerNonUserCodeAttribute属性,将其应用在希望不进行调试的代码段中。

  下面举一个例子来说明。下面的代码段中,有两个静态方法UserCode()和NonUserCode(),其中,在NonUserCode()中,是应用了DebuggerNonUserCode的属性,这表明这段代码将在调试运行时,调试器不会进入其中。将断点设置在其中的第9行,运行程序,程序会在第一个UserCode()里中断,现在试着用F11继续单步跟踪,会发现系统在进入usercode()方法中运行后,并没有进入到NonUserCode()里运行。

using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
// Step into F11 from here
UserCode();// Place break point on this line
NonUserCode();
UserCode();
}
static void UserCode()
{
Console.WriteLine("This is a call from user Code");
}
// Attribute to indicate the Debugger to jump
// over this method
[DebuggerNonUserCode]
static void NonUserCode()
{
Console.WriteLine("This is a call fron Non User Code");
}
}

编辑时对象识别

  在Visual Studio 2005中,新引入了"Object Identity While Debugging"的概念,也就是说,系统给在调试阶段的每个对象,都可以赋予一个别名,在调试时,直接引用该别名就可以了。

  假设在调试的时候,需要跟踪比如dataset或者hashtable等对象,这些对象中包含了很多其他的子对象,如果想对这些数量众多的子对象进行跟踪的话,将十分麻烦。在Visual Studio 2005中,可以使用object identity(对象标识)的方法去标记每一个对象,

  比如,在一个windows应用程序中,创建了一个dataset,并将其绑定到datagridview中去。如将sql server 的northwind数据库中的orders和orderdetail表中的数据读出填充到dataset里去,则在调试时,设置一个断点放在dataset里填充了数据之后的那行,这时,在监视窗口中,鼠标展开this.northwindData这个dataset,如下图所示,找到orders这个table,然后鼠标右键,会弹出一个菜单,选择其中的" Make Object ID".

这时,会将orders这个参数以1#的别名方式命名(见下图),并且在整个应用程序中,只要在dataset的生存期,都可以以1#的方式访问它。

下图的代码演示了如何在immediate监视窗口中,通过使用object 标识,查看某一个表中所有记录的方法。要注意的是,必须将其显式类型转换为DataApp.NorthwidDataSet.OrdersDataTable。通过使用object 标识的好处是,可以在调试阶段,不需要在描述某个参数时,再用冗余的命名方法表示了(比如可以用#1来代替this.NorthwidDataSet.Orders)
   最近学习asp.net 2.0时新编译修改的一篇文章,原文发表在http://dev.yesky.com/msdn/359/2195359.shtml上,现转到这里。
   在日常的编程中,程序员经常离不开的工作之一,就是调试。当写好一段代码或程序后,在运行后总会出现这样那样的问题,比如各样的错误,程序员就必须进行调试,将这些错误排除。在最新出炉的Visual Studio 2005中,将提供十分强大而方便的调试功能,从而使程序员能节约时间,提高工作效率。本文中,将主要介绍Visual Studio 2005 在调试方面新增加的几个重要功能,并介绍它们的简单用法。
  
  Edit and Contiue功能

  在调试程序的时候,经常会遇到这样的情况:在调试一大段代码时,遇到了一个小的错误,比如参数的赋值错误了,这时候,往往希望能够马上将这些小的错误改正过来后,能够继续调试跟踪下去,而不用结束整个调试过程去修改。在Visual Studio 2003中,我们必须停止当前的调试,修改错误的地方,再重新编译,这样十分不方便。在Visual Studio 2005 中,提供了一个新的功能叫"edit and continue",意思是说,当你在调试时,遇到小的错误需要马上修改后,可以进行编辑修改,然后继续往下调试,不需要结束整个调试的过程,当你修改后,调试器在后台进行了自动的编译,并且会执行新修改的代码,十分方便。下面举个例子进行说明。

  打开Visual Studio 2005,使用c#建立一个winform窗体应用程序,在窗体中添加一个label标签,一个文本框,一个按钮,如下图所示,我们要实现的功能是,在文本框输入一些信息后,点按钮,会弹出一个消息框,显示的是刚才输入的信息。

假如我们编写的代码如下所示,出现了一个小错误,把textbox1.text的内容当作字符串的一部分了,所以显示不出用户输入的信息。

private void button1_Click(object sender, EventArgs e)
{
 //Show welcome message
 MessageBox.Show("Welcome textbox1.Text to Edit and Continue.");
}

现在,如果我们在调试时遇到了这个错误,则可以使用edit and continue功能来进行改正。

  首先,按F7切换到代码视图,在MessageBox.Show这一行设置断点,之后按F5运行程序,当在文本框输入字符串时,由于设置了中断,光标停留在messagebox.show这行上,这时,我们可以修改代码,修改为:

private void button1_Click(object sender, EventArgs e)
{
 MessageBox.Show("Welcome " + textbox1.Text +" to Edit and Continue.");
}

  修改完后,继续按F5运行,这时候,则会显示正确的结果了,如下图,而不需要使用以往的"stop debugging"的功能先停止调试再修改程序。

可视化调试器(Debugging Visualizers)

  在调试的时候,我们遇到的一个很麻烦的问题,就是有的时候很难看到某些参数的值。比如当你设置了一个断点去监测一个dataset,并且想看dataset里的每个datatable的数据,这在Visual Studio 2003中,是十分麻烦的,必须在auto/locals的监视窗口中,一层层地展开去看其值。在Visual Studio 2005中,为解决这个问题,新增加了叫"debugging visualizers"(可视化调试器)的功能,该功能可以在调试状态时,很容易方便地以各类形式,比如文本,html,xml等方式查看各种参数。

  在各类的监视窗口中,比如在autos,locals,watch和quickwatch 中都可以调用可视化调试器,方法是在某个需要监视的参数旁边,点击那个放大镜图标,就可以在打开的可视化调试器中看到该参数的详细情况,如下图所示:
  
     利用可视化调试器,就可以很方便地查看比如dataset类型的数据,如下图所示:

Data Tips

  在Visual Studio 2005中,在调试方面,还新增了"data tips(数据提示)"的功能。当在调试程序期间,只需要将光标移到代码中某个需要监视的参数上,系统就会自动显示与该参数相关联的一些很有用的信息,比如相关的属性,以及当前该参数的值。在Visual Studio 2003中,也有该功能,但提供的信息比现在的2005少很多。

  我们依然以上面"edit and continue"使用的例子来说明。我们将断点设在MessageBox.Show这一行,F5运行程序,当在文本框输入文字并按确定按钮后,程序自动中断,这时,将光标移到textbox1.text这个位置,系统就会调用data tips功能,如下图所示显示出与textbox文本框控件相关的一些属性以及这些属性此时对应的值。

在data tip的功能中,还可以继续使用edit and continue的功能,只需要在需要的地方鼠标右键就可以弹出如下图的菜单,可以编辑该值。

Exception Assistant(异常助手)

  在Visual Studio .net 2003中,当程序运行出现异常时,系统会显示一个异常信息对话框,询问是否停止程序执行或继续运行程序,但并没有提供给开发者更多的关于异常的信息。在Visual Studio .net 2005中,提供了 Exception Assistant(异常助手)的新功能,可以显示丰富的关于异常方面的信息,帮助开发者调试,如下图
  
   
   在上图中,显示的是一个sqlException,是由于超时连接而造成的。在异常助手的窗口中,显示了关于该异常的详细信息,还可以将这些信息复制到剪贴版中,当选择view detail时,会弹出如下图所示的窗口,进一步显示关于该异常的详细信息
  
     Just My Code Debugging

  在调试代码中,我们经常会遇到这样的问题,有时我们引用了一些其他工具包或者类库(如Microsoft提供的Enterprise Library),而在调试时,我们其实是不需要跟踪调试这些代码的,因为它们都已经证明是正确的。在Visual Studio 2003中,处理这类问题我们的方法一般是使用F10跳过它们,但一旦工程庞大的话,这样做十分麻烦。在Visual Studio 2005中,新增加了Just My Code debugging(JMC)的新特性,可以让开发者自己定制哪些代码是需要调试,哪些代码是永远不需要调试的,这样可以节省大量的时间。

  JMC功能由两方面来实现。首先,如果一个工程是以release方式进行编译构建的话(就是工程中,没有pdb文件),调试器会将其认为是非用户代码,那么在调试运行时,就根本不会进入该工程中进行调试。其次,可以使用System.Diagnostics命名空间里的DebuggerNonUserCodeAttribute属性,将其应用在希望不进行调试的代码段中。

  下面举一个例子来说明。下面的代码段中,有两个静态方法UserCode()和NonUserCode(),其中,在NonUserCode()中,是应用了DebuggerNonUserCode的属性,这表明这段代码将在调试运行时,调试器不会进入其中。将断点设置在其中的第9行,运行程序,程序会在第一个UserCode()里中断,现在试着用F11继续单步跟踪,会发现系统在进入usercode()方法中运行后,并没有进入到NonUserCode()里运行。

using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
// Step into F11 from here
UserCode();// Place break point on this line
NonUserCode();
UserCode();
}
static void UserCode()
{
Console.WriteLine("This is a call from user Code");
}
// Attribute to indicate the Debugger to jump
// over this method
[DebuggerNonUserCode]
static void NonUserCode()
{
Console.WriteLine("This is a call fron Non User Code");
}
}

编辑时对象识别

  在Visual Studio 2005中,新引入了"Object Identity While Debugging"的概念,也就是说,系统给在调试阶段的每个对象,都可以赋予一个别名,在调试时,直接引用该别名就可以了。

  假设在调试的时候,需要跟踪比如dataset或者hashtable等对象,这些对象中包含了很多其他的子对象,如果想对这些数量众多的子对象进行跟踪的话,将十分麻烦。在Visual Studio 2005中,可以使用object identity(对象标识)的方法去标记每一个对象,

  比如,在一个windows应用程序中,创建了一个dataset,并将其绑定到datagridview中去。如将sql server 的northwind数据库中的orders和orderdetail表中的数据读出填充到dataset里去,则在调试时,设置一个断点放在dataset里填充了数据之后的那行,这时,在监视窗口中,鼠标展开this.northwindData这个dataset,如下图所示,找到orders这个table,然后鼠标右键,会弹出一个菜单,选择其中的" Make Object ID".

这时,会将orders这个参数以1#的别名方式命名(见下图),并且在整个应用程序中,只要在dataset的生存期,都可以以1#的方式访问它。

下图的代码演示了如何在immediate监视窗口中,通过使用object 标识,查看某一个表中所有记录的方法。要注意的是,必须将其显式类型转换为DataApp.NorthwidDataSet.OrdersDataTable。通过使用object 标识的好处是,可以在调试阶段,不需要在描述某个参数时,再用冗余的命名方法表示了(比如可以用#1来代替this.NorthwidDataSet.Orders)
   最近学习asp.net 2.0时新编译修改的一篇文章,原文发表在http://dev.yesky.com/msdn/359/2195359.shtml上,现转到这里。
   在日常的编程中,程序员经常离不开的工作之一,就是调试。当写好一段代码或程序后,在运行后总会出现这样那样的问题,比如各样的错误,程序员就必须进行调试,将这些错误排除。在最新出炉的Visual Studio 2005中,将提供十分强大而方便的调试功能,从而使程序员能节约时间,提高工作效率。本文中,将主要介绍Visual Studio 2005 在调试方面新增加的几个重要功能,并介绍它们的简单用法。
  
  Edit and Contiue功能

  在调试程序的时候,经常会遇到这样的情况:在调试一大段代码时,遇到了一个小的错误,比如参数的赋值错误了,这时候,往往希望能够马上将这些小的错误改正过来后,能够继续调试跟踪下去,而不用结束整个调试过程去修改。在Visual Studio 2003中,我们必须停止当前的调试,修改错误的地方,再重新编译,这样十分不方便。在Visual Studio 2005 中,提供了一个新的功能叫"edit and continue",意思是说,当你在调试时,遇到小的错误需要马上修改后,可以进行编辑修改,然后继续往下调试,不需要结束整个调试的过程,当你修改后,调试器在后台进行了自动的编译,并且会执行新修改的代码,十分方便。下面举个例子进行说明。

  打开Visual Studio 2005,使用c#建立一个winform窗体应用程序,在窗体中添加一个label标签,一个文本框,一个按钮,如下图所示,我们要实现的功能是,在文本框输入一些信息后,点按钮,会弹出一个消息框,显示的是刚才输入的信息。

假如我们编写的代码如下所示,出现了一个小错误,把textbox1.text的内容当作字符串的一部分了,所以显示不出用户输入的信息。

private void button1_Click(object sender, EventArgs e)
{
 //Show welcome message
 MessageBox.Show("Welcome textbox1.Text to Edit and Continue.");
}

现在,如果我们在调试时遇到了这个错误,则可以使用edit and continue功能来进行改正。

  首先,按F7切换到代码视图,在MessageBox.Show这一行设置断点,之后按F5运行程序,当在文本框输入字符串时,由于设置了中断,光标停留在messagebox.show这行上,这时,我们可以修改代码,修改为:

private void button1_Click(object sender, EventArgs e)
{
 MessageBox.Show("Welcome " + textbox1.Text +" to Edit and Continue.");
}

  修改完后,继续按F5运行,这时候,则会显示正确的结果了,如下图,而不需要使用以往的"stop debugging"的功能先停止调试再修改程序。

可视化调试器(Debugging Visualizers)

  在调试的时候,我们遇到的一个很麻烦的问题,就是有的时候很难看到某些参数的值。比如当你设置了一个断点去监测一个dataset,并且想看dataset里的每个datatable的数据,这在Visual Studio 2003中,是十分麻烦的,必须在auto/locals的监视窗口中,一层层地展开去看其值。在Visual Studio 2005中,为解决这个问题,新增加了叫"debugging visualizers"(可视化调试器)的功能,该功能可以在调试状态时,很容易方便地以各类形式,比如文本,html,xml等方式查看各种参数。

  在各类的监视窗口中,比如在autos,locals,watch和quickwatch 中都可以调用可视化调试器,方法是在某个需要监视的参数旁边,点击那个放大镜图标,就可以在打开的可视化调试器中看到该参数的详细情况,如下图所示:
  
     利用可视化调试器,就可以很方便地查看比如dataset类型的数据,如下图所示:

Data Tips

  在Visual Studio 2005中,在调试方面,还新增了"data tips(数据提示)"的功能。当在调试程序期间,只需要将光标移到代码中某个需要监视的参数上,系统就会自动显示与该参数相关联的一些很有用的信息,比如相关的属性,以及当前该参数的值。在Visual Studio 2003中,也有该功能,但提供的信息比现在的2005少很多。

  我们依然以上面"edit and continue"使用的例子来说明。我们将断点设在MessageBox.Show这一行,F5运行程序,当在文本框输入文字并按确定按钮后,程序自动中断,这时,将光标移到textbox1.text这个位置,系统就会调用data tips功能,如下图所示显示出与textbox文本框控件相关的一些属性以及这些属性此时对应的值。

在data tip的功能中,还可以继续使用edit and continue的功能,只需要在需要的地方鼠标右键就可以弹出如下图的菜单,可以编辑该值。

Exception Assistant(异常助手)

  在Visual Studio .net 2003中,当程序运行出现异常时,系统会显示一个异常信息对话框,询问是否停止程序执行或继续运行程序,但并没有提供给开发者更多的关于异常的信息。在Visual Studio .net 2005中,提供了 Exception Assistant(异常助手)的新功能,可以显示丰富的关于异常方面的信息,帮助开发者调试,如下图
  
   
   在上图中,显示的是一个sqlException,是由于超时连接而造成的。在异常助手的窗口中,显示了关于该异常的详细信息,还可以将这些信息复制到剪贴版中,当选择view detail时,会弹出如下图所示的窗口,进一步显示关于该异常的详细信息
  
     Just My Code Debugging

  在调试代码中,我们经常会遇到这样的问题,有时我们引用了一些其他工具包或者类库(如Microsoft提供的Enterprise Library),而在调试时,我们其实是不需要跟踪调试这些代码的,因为它们都已经证明是正确的。在Visual Studio 2003中,处理这类问题我们的方法一般是使用F10跳过它们,但一旦工程庞大的话,这样做十分麻烦。在Visual Studio 2005中,新增加了Just My Code debugging(JMC)的新特性,可以让开发者自己定制哪些代码是需要调试,哪些代码是永远不需要调试的,这样可以节省大量的时间。

  JMC功能由两方面来实现。首先,如果一个工程是以release方式进行编译构建的话(就是工程中,没有pdb文件),调试器会将其认为是非用户代码,那么在调试运行时,就根本不会进入该工程中进行调试。其次,可以使用System.Diagnostics命名空间里的DebuggerNonUserCodeAttribute属性,将其应用在希望不进行调试的代码段中。

  下面举一个例子来说明。下面的代码段中,有两个静态方法UserCode()和NonUserCode(),其中,在NonUserCode()中,是应用了DebuggerNonUserCode的属性,这表明这段代码将在调试运行时,调试器不会进入其中。将断点设置在其中的第9行,运行程序,程序会在第一个UserCode()里中断,现在试着用F11继续单步跟踪,会发现系统在进入usercode()方法中运行后,并没有进入到NonUserCode()里运行。

using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
// Step into F11 from here
UserCode();// Place break point on this line
NonUserCode();
UserCode();
}
static void UserCode()
{
Console.WriteLine("This is a call from user Code");
}
// Attribute to indicate the Debugger to jump
// over this method
[DebuggerNonUserCode]
static void NonUserCode()
{
Console.WriteLine("This is a call fron Non User Code");
}
}

编辑时对象识别

  在Visual Studio 2005中,新引入了"Object Identity While Debugging"的概念,也就是说,系统给在调试阶段的每个对象,都可以赋予一个别名,在调试时,直接引用该别名就可以了。

  假设在调试的时候,需要跟踪比如dataset或者hashtable等对象,这些对象中包含了很多其他的子对象,如果想对这些数量众多的子对象进行跟踪的话,将十分麻烦。在Visual Studio 2005中,可以使用object identity(对象标识)的方法去标记每一个对象,

  比如,在一个windows应用程序中,创建了一个dataset,并将其绑定到datagridview中去。如将sql server 的northwind数据库中的orders和orderdetail表中的数据读出填充到dataset里去,则在调试时,设置一个断点放在dataset里填充了数据之后的那行,这时,在监视窗口中,鼠标展开this.northwindData这个dataset,如下图所示,找到orders这个table,然后鼠标右键,会弹出一个菜单,选择其中的" Make Object ID".

这时,会将orders这个参数以1#的别名方式命名(见下图),并且在整个应用程序中,只要在dataset的生存期,都可以以1#的方式访问它。

下图的代码演示了如何在immediate监视窗口中,通过使用object 标识,查看某一个表中所有记录的方法。要注意的是,必须将其显式类型转换为DataApp.NorthwidDataSet.OrdersDataTable。通过使用object 标识的好处是,可以在调试阶段,不需要在描述某个参数时,再用冗余的命名方法表示了(比如可以用#1来代替this.NorthwidDataSet.Orders)

转载于:https://www.cnblogs.com/kimi/archive/2007/10/18/929425.html

Visual Studio 2005中编译调试新功能相关推荐

  1. Visual Studio 2005 中的新增安全性功能

    Visual Studio 2005 中的新增安全性功能 Visual Studio 2005 中的新增安全性功能 发布日期: 11/18/2005 | 更新日期: 11/18/2005 Brian ...

  2. Microsoft Visual Studio 2005中使用水晶报表

    Microsoft Visual Studio 2005中使用水晶报表 沈阳 王智 OICQ:16994162 http://wangzhihome.51.net/ 2006-4-11 如有转贴请注明 ...

  3. 图解Visual Studio 2010中的UML建模功能

    Visual Studio 2010在架构和项目管理方面的功能增加让人眼前一亮,之前曾详细介绍过Visual Studio 2010新增的架构工具,包括通过可视化技术DGML提供直观的图表,依赖图,继 ...

  4. 在visual studio 2005中配置iup环境

    在Visual Studio 2005中配置iup环境 原本是想在Linux环境中配置iup的,折腾了两天都没有成功.想着先在windows中试一下.所以这里把配置的过程写一下. 1.下载iup的wi ...

  5. 解决OpenSSL加入到在Visual Studio 2019中编译返回LNK2019错误

    文章目录 小结 问题和解决 Error LNK2019 Error LNK1104 Warning C4996 参考 小结 碰到了OpenSSL加入到在Visual Studio 2019中编译返回L ...

  6. 在Visual Studio 2005中调试SQL Server 2005的存储过程

    介绍 SQL Server 2000可以让我们在查询分析器中直接调试存储过程( 更多的信息请参看:用SQL Server 2000的查询分析器调试存储过程) 到了现在的SQL Server 2005, ...

  7. 在Visual Studio 2005中安装Qt 4.3.2

    1.正常安装Visual Studio 2005,只要安装了C++即可.注意:不是Express版本. 2.下载Qt源代码 Qt 4.3.2 Windows OpenSource版下载: http:/ ...

  8. Visual Studio 2005中C++的变化

    下一代visual studio版本(以前whidbey,现在是visual studio 2005)提供更加丰富的改进的库文件和没有很多幕后精简和加速的压力,它的大量配合的工具和新的功能将使开发者的 ...

  9. Visual Studio 2005 中的 命令窗口

    "命令"窗口用于直接在 Visual Studio 集成开发环境 (IDE) 中执行命令或别名.可以执行菜单命令和不在任何菜单上显示的命令. 1 调用命令窗口: 若要显示" ...

最新文章

  1. 多媒体视像会议中音视频矩阵的用途
  2. Jenkins构建自动化脚本执行无界面解决方法
  3. 打工人一次性考过高项的备考指南(52.50.50)
  4. 一图揭示:营销的目的、策略、战略
  5. div+css 你知道多少?值得一看
  6. json string 格式_GO小知识之如何做JSON美化
  7. c语言设计第4章答案,《C语言程序设计》第4章习题答案.doc
  8. sql cte递归_准备好,开始吧– SQL Server如何处理递归CTE
  9. [转] js对象监听实现
  10. MAC版pycharm快捷键
  11. android 手机屏幕实际大小,揭秘手机屏幕误区 大尺寸≠大可视面积
  12. 黑客防线2012合订本
  13. RAR压缩包密码如何解密
  14. [WPF 如何] 如何向 ComboBox 添加一个空白选项
  15. 华为matebook鸿蒙,16寸专业大屏+满血Zen3!华为MateBook 16评测:鸿蒙加持 平板变身新外设...
  16. 位移到速度的变化 matlab,单摆运动过程的matlabsimulink建模与仿真.doc
  17. 【JZOJ100208】【20190705】传说之下
  18. 红绿灯(交通信号灯)检测数据集
  19. Web安全—敏感信息泄露
  20. 记录小知识:Arouter 组件间通讯实体类数据

热门文章

  1. 王重敏的“中国主义”
  2. 热转印法手工自制单面PCB流程和技巧总结
  3. Ubuntu中配置NFS服务
  4. VS2010 + OpenCV 2.4.1 环境配置
  5. 使用握手信号实现跨时钟域数据传输
  6. html提交多个正则表达式,将多个html文件的正则表达式结果写入.txt outfile
  7. linux下shell脚本论文,Linux下Shell脚本编程
  8. Unity Built-in Shader转URP Shader 接口查询对照表
  9. matlab求距离判别函数,求MATLAB的逐步判别程序 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  10. css 清除浮动float 嗒嘀嗒滴 ----20181120