Visual Studio 2005中编译调试新功能


  
在日常的编程中,程序员经常离不开的工作之一,就是调试。当写好一段代码或程序后,在运行后总会出现这样那样的问题,比如各样的错误,程序员就必须进行调试,将这些错误排除。在最新出炉的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,watchquickwatch 中都可以调用可视化调试器,方法是在某个需要监视的参数旁边,点击那个放大镜图标,就可以在打开的可视化调试器中看到该参数的详细情况,如下图所示:
  
    
利用可视化调试器,就可以很方便地查看比如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数据库中的ordersorderdetail表中的数据读出填充到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,watchquickwatch 中都可以调用可视化调试器,方法是在某个需要监视的参数旁边,点击那个放大镜图标,就可以在打开的可视化调试器中看到该参数的详细情况,如下图所示:
  
    
利用可视化调试器,就可以很方便地查看比如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数据库中的ordersorderdetail表中的数据读出填充到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,watchquickwatch 中都可以调用可视化调试器,方法是在某个需要监视的参数旁边,点击那个放大镜图标,就可以在打开的可视化调试器中看到该参数的详细情况,如下图所示:
  
    
利用可视化调试器,就可以很方便地查看比如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数据库中的ordersorderdetail表中的数据读出填充到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,watchquickwatch 中都可以调用可视化调试器,方法是在某个需要监视的参数旁边,点击那个放大镜图标,就可以在打开的可视化调试器中看到该参数的详细情况,如下图所示:
  
    
利用可视化调试器,就可以很方便地查看比如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数据库中的ordersorderdetail表中的数据读出填充到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,watchquickwatch 中都可以调用可视化调试器,方法是在某个需要监视的参数旁边,点击那个放大镜图标,就可以在打开的可视化调试器中看到该参数的详细情况,如下图所示:
  
    
利用可视化调试器,就可以很方便地查看比如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数据库中的ordersorderdetail表中的数据读出填充到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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows7 系统优化大技巧

1. 加快win7系统启动速度首先,打开win7开始菜单在搜索程序框中输入“msconfig”命令,打开系统配置窗口后找到“引导”选项(英文系统是Boot)。win7拥有强大便捷的搜索栏,记住一些常用命令,可以让你操作起来更快捷。 点击“高级选项…

新快现类似产品_小米全新折叠屏产品曝光,预计今年还有更多折叠屏产品亮相...

虽然目前小米并未正式推出旗下的折叠屏设备,但这并不意味着小米放弃了这方面的研究。相反,近日的一些爆料显示了小米在折叠屏设备领域有着多种不同的设想和思路。上个月的相关爆料曾提到过,小米2021年有望推出外折型、内折型和翻盖式三种不同…

全虚拟化和半虚拟化的区别 cpu的ring0~ring3又是什么概念?

ring0是指CPU的运行级别,ring0是最高级别,ring1次之,ring2更次之…… 拿Linuxx86来说, 操作系统(内核)的代码运行在最高运行级别ring0上,可以使用特权指令,控制中断、修改页表、访问…

设置span的宽度

在默认的情况下,利用 css 样式对 span 进行宽度设定是无效,但有时为了某种排版的要求,需要对 span 进行宽度设定,那么如何在 html 中利用 css 样式设定 span 的宽度?思路:这看上去是个很简单的问题&#xf…

dual mysql 获取序列_MySQL JDBC客户端反序列化漏洞

标题: MySQL JDBC客户端反序列化漏洞☆ 背景介绍☆ 学习思路☆ 搭建测试环境☆ 恶意MySQL插件 1) 获取MySQL 5.7.28源码 2) 在rewrite_example基础上修改出evilreplace☆ 测试rewriter插件 1) 安装rewriter.so 2) 在服务端替换SQL查询语句 3) 卸载rewriter.so …

kali linux之edb--CrossFire缓冲区溢出

漏洞的罪恶根源------变量,数据与代码边界不清,开发人员对用户输入没做过滤,或者过滤不严 如这个脚本,写什么,显示什么,但是加上;,|,&&,后面加上系统…

SQL连接查询深度探险

测试环境:Windows XP ProfessionMySQL 5.0.45Oracle 9iDB2 UDB 9.1测试的SQL脚本如下:此脚本适合MySQL、DB2,如果要在Oracle上执行,需要做个替换BIGINTINTEGER、VARCHARVARCHAR2。CREATETABLECUSTOMERS (ID BIGINT NOTNULL,NAME V…

[Bug]Object reference not set to an instance of an object.

引言 今天在客户这儿,由一个问题导致,需求的变化,不得不修改代码,在记录日志中出现该问题。 原因 通过id查找相关信息,没有判断是否为null,集合是否有数据。 Object reference not set to an instance of a…

自锁时间电路plc_1篇文章,4幅图,了解PLC接线和控制图就是这么简单

有网友留言说看不懂plc梯形图,不知道如何将电气控制原理图转化为plc接线图,今天就系统的来看一下plc的原理和接线,再转化为plc接线图,我们需要借助一个最简单的单向过载保护的自锁控制电路。来看一下电路元器件,FR热机…

Python~字典快速上手

目录 Key的重要性 一 创建字典{} 二 字典用key查找 in(遍历)和[]用key查找 keyerror in和[]的效率对比 三 字典的插入/修改/删除(先查找) ​编辑 四 字典增删查改/遍历的效率 五 字典的遍历 for遍历可迭代对象拿到key 与创建顺序相同 keys/values/items方法 六 可…

sql 相关子查询

相关子查询3个执行步骤 1.外部查询获得一个记录,然后将该记录传递到内部查询. 2.内部查询根据传递的值执行. 3.内部查询将结果值传回外部查询,外部查询利用这些值完成处理过程.转载于:https://www.cnblogs.com/Spinoza/p/10426904.html

常用的一些javascript小技巧

常用的一些javascript小技巧 [作者:oror,from蓝色理想] 事件源对象 event.srcElement.tagName event.srcElement.type ……………………………… 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture();事件按键event.keyCode …

活动目录服务器(windows server 2008)

1、在服务器管理器中添加角色,勾选Active Directory域服务、DNS服务器进行安装2、安装好后运行dcpromo进入域服务安装向导,选择高级模式安装3、出现部署配置时,勾选新林中新建4、在命名林输入域名称(ganen5.local)5、在…

漫步者蓝牙只有一边有声音_漫步者DreamPods半个月上手体验:谈谈那些好的和不好的地方...

随着手机逐渐取消了耳机孔,越来越多的人们开始使用上了蓝牙耳机。在当今这个飞速发展的时代,蓝牙耳机蓝无疑成为了新时代的宠儿。无论是上班族还是当代大学生等年轻化群体,蓝牙耳机无疑成为了一个不错的喜好选择。但是面对市面上如此多的蓝牙…

MySQL源码包编译安装

标题:MySQL数据库实例部署时间:2019年5月2日内容:MySQL源码包进行编译,然后部署MySQL单实例1. MySQL源码包编译1.1 安装编译环境# yum install -y gcc gcc-c# yum install -y ncurses-devel.x86_64# yum install -y libaio.x86_64…

moss 部署问题

(一) 编辑PostBuildActions.bat 在编译过程中如果你把vs安装在D盘那么你必须将%programfiles%\Microsoft Visual Studio 8\SDK\v2.0\Bin替换成D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin否则找不到gacutil.exe,无法编译成功。…

c++ 输出控制iomanip

2019独角兽企业重金招聘Python工程师标准>>> 1输出精度控制 #include<iostream> #include <iomanip>//精度控制相关头文件 using namespace std;int main(){streamsize preccout.precision(); //获取默认精度 cout<<"default precisi…

c++ 可视化界面_这些算法可视化网站助你轻松学算法

作者&#xff1a;守望&#xff0c;Linux应用开发者&#xff0c;目前在公众号【编程珠玑】 分享Linux/C/C/数据结构与算法/工具等原创技术文章和学习资源。前言无疑&#xff0c;数据结构与算法学习最大的难点之一就是如何在脑中形象化其抽象的逻辑步骤。而图像在很多时候能够大大…

c#中的接口的定議以及接口與抽象类的區別

c#中的接口 目录 接口的定义 接口与抽象类 接口的的实现 接口的的多态性 一&#xff0e;接口的定义 定义&#xff1a;定义一个协定。实现接口的类或结构必须遵守其协定。 简单的说就是接口或者类之间交互时遵守的一个显示定义。最初接触“类与类之间通过接口交互”这个概念时&…

2. with check option能起什么作用?_面部毛孔粗大,有什么拯救的方法吗?

很多妹子都有毛孔粗大的问题&#xff0c;却苦恼于怎么改善&#xff0c;用错方法可能会刺激毛孔&#xff0c;但是你知道毛孔粗大的原因吗&#xff1f;首先&#xff0c;先搞清楚自己是什么类型的毛孔粗大&#xff0c;再对症下药。 &#xfffc;皮脂分泌旺盛这是毛孔粗大最常见的原…