黑马程序员_C#代码的调试问题
2013-06-16 18:26
239 查看
----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流!
----------------------
代码中有时难免存在错误,无论程序员多么谨慎,程序总是会出现一些问题。一些问题比较小,不会影响应用程序的执行,例如,按钮上的拼写错误等,但一些错误可能比较严重,会导致应用程序完全失败(通常称为致命错误),致命错误包括妨碍代码编译的简单错误(语法错误),或者只在运行期间发生的更严重的错误。一些错误可能会更微妙。也许应用程序不能给数据库添加一个记录,因为遗漏了一个请求的字段,或者在其它有限制的环境中把错误的数据添加到到记录中。应用程序的逻辑在某些方面有瑕疵时,就会产生这样的错误,此类错误成为语义错误(或逻辑错误)。
当应用程序不能正常工作时,需要跟踪代码,确定发生了什么问题,并修改代码,使之按照希望的那样工作。在这种情况下,Visual Studio 2010的调试功能就可以大显身手了。在Visual Studio 2010中,可以采用两种方式执行应用程序:调试模式和非调试模式。在vs2010中执行应用程序时,它默认在调试模式下执行。例如,按下F5键或单击工具栏中的绿色Play按钮时,就是在调试模式下执行应用程序。要在非调试模式下执行应用程序,应选择 调试| 开始执行不调试(Ctrl+F5).
在调试配置下生成应用程序,在调试模式下运行程序时,并不仅仅是运行编写好的代码。调试程序包含了应用程序的符号信息,所以IDE知道执行每行代码时发生了什么。符号信息意味着跟踪未编译代码中使用的变量名,这样,它们就可以匹配已编译的机器码应用程序中现有的值,而机器码程序不包含人们易于读取的信息。此类信息包含在.pdb文件中,这些文件位于计算机的Debug目录下。它们可以执行很多有用的操作,包括:
● 向IDE输出调试信息
●在执行应用程序期间查看和编辑变量的值
●暂停程序和重启程序
● 在代码的某个位置自动暂停程序的执行
●一次执行程序中的一行代码
●在应用程序的执行期间监视变量内容的变化
●在运行期间修改变量内容
●测试函数的调用
发布版本运行的比较快,完成了应用程序的开发时,一般应给用户提供发布版本,因为发布版本不需要调试版本所包含的符号信息。
在vs2010的术语中,应用程序可以处于运行状态,也可以处于中断模式,即暂停正常的执行。
下面首先介绍非中断模式(运行期间或正常执行)技术。
1.输出调试信息
在运行期间把文本写入Output窗口是非常简单的。只要用需要的调用替代Console.WriteLine()调用,就可以把文本写到希望的地方。此时可以使用如下两个命令:
●Debug.WriteLine()
●Trace.WriteLine()
这两个命令函数的用法几乎完全相同,但有一个重要区别。第一个命令仅在调试模式下运行,而第二个命令还可以用于发布程序。实际上,Debug.WriteLine()命令不能编译为可发布的程序,在发布版本中,该命令会消失。
2.跟踪点
另一种把信息输出到Output窗口中的方法是使用跟踪点。这是Visual Studio的一个功能,而不是C#的功能,但其作用与使用Debug.WriteLine()相同。它实际上是输出调试信息且不修改代码的一种方式。
3.诊断输出与跟踪点
前面介绍了两种输出相同信息的方法,下面看看它们的优缺点。
首先,跟踪点与Trace命令并不等价,也就是说,不能使用跟踪点在发布版本中输出信息。这是因为跟踪点并没有包含在应用程序中。跟踪点由VS处理,在应用程序的已编译版本中,跟踪点是不存在的。只用应用程序运行在VS调试器中时,跟踪点才起作用。
跟踪点的主要缺点也是其优点,即它们存储在VS中,因此可以在需要时快速、方便地添加到应用程序中,而且也非常容易删除。如果输出非常复杂的信息字符串,觉得跟踪点非常讨厌,只需要单击表示其位置的红色菱形,就可以删除跟踪点。
跟踪点的一个优点是允许方便的添加额外的信息,这个信息可以用Debug和Trace命令来编写,但比较难。
总结一下,输出调试信息的两种方法是:
● 诊断输出:总是要从应用程序中输出调试结果时使用这种方法,尤其是在要输出的字符串比较复杂,涉及几个变量或许多信息的情况下,使用该方法比较好。另外,如果要在发布模式下获得执行应用程序的调试结果,Trace命令常常是唯一的选择。
●跟踪点:调试应用程序时,希望快速输出重要信息,以便解决语义错误,应使用跟踪点。
其次介绍中断模式下的调试:
调试技术的剩余内容是在中断模式下工作。可以通过几种方式进入这种模式,这些方式都可以暂停程序的执行。
1.进入中断模式
断点
断点是源代码中自动进入中断模式的一个标记,它们可以配置为:
● 在遇到断点时,立即进入中断模式
● 在遇到断点时,如果布尔表达式的值为true,就进入中断模式
● 遇到某断点一定的次数后,进入中断模式
● 在遇到断点时,如果自从上次遇到断点以来变量的值发生了变化,就进入中断模式
● 把文本输出到Output窗口中
注意,上述功能仅能用于调试程序。如果编译发布程序,将会忽略所有断点。
2.监视变量的内容
查看变量值的最简单方式是在中断模式下,是鼠标指向源代码中的变量名,此时就会出现一个黄色的工具提示,显示该变量的信息,包括该变量的当前值。
3.单步执行代码
进入中断模式后,在代码视图的左边,正在执行的代码旁边会出现一个光标(如果使用断点进入中断模式,该光标最初应显示在断点的红色圆圈中),这显示了在进入中断模式时程序执行到的位置,可以选择逐行执行。
----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流!
----------------------
详细请查看:http://edu.csdn.net
----------------------
代码中有时难免存在错误,无论程序员多么谨慎,程序总是会出现一些问题。一些问题比较小,不会影响应用程序的执行,例如,按钮上的拼写错误等,但一些错误可能比较严重,会导致应用程序完全失败(通常称为致命错误),致命错误包括妨碍代码编译的简单错误(语法错误),或者只在运行期间发生的更严重的错误。一些错误可能会更微妙。也许应用程序不能给数据库添加一个记录,因为遗漏了一个请求的字段,或者在其它有限制的环境中把错误的数据添加到到记录中。应用程序的逻辑在某些方面有瑕疵时,就会产生这样的错误,此类错误成为语义错误(或逻辑错误)。
当应用程序不能正常工作时,需要跟踪代码,确定发生了什么问题,并修改代码,使之按照希望的那样工作。在这种情况下,Visual Studio 2010的调试功能就可以大显身手了。在Visual Studio 2010中,可以采用两种方式执行应用程序:调试模式和非调试模式。在vs2010中执行应用程序时,它默认在调试模式下执行。例如,按下F5键或单击工具栏中的绿色Play按钮时,就是在调试模式下执行应用程序。要在非调试模式下执行应用程序,应选择 调试| 开始执行不调试(Ctrl+F5).
在调试配置下生成应用程序,在调试模式下运行程序时,并不仅仅是运行编写好的代码。调试程序包含了应用程序的符号信息,所以IDE知道执行每行代码时发生了什么。符号信息意味着跟踪未编译代码中使用的变量名,这样,它们就可以匹配已编译的机器码应用程序中现有的值,而机器码程序不包含人们易于读取的信息。此类信息包含在.pdb文件中,这些文件位于计算机的Debug目录下。它们可以执行很多有用的操作,包括:
● 向IDE输出调试信息
●在执行应用程序期间查看和编辑变量的值
●暂停程序和重启程序
● 在代码的某个位置自动暂停程序的执行
●一次执行程序中的一行代码
●在应用程序的执行期间监视变量内容的变化
●在运行期间修改变量内容
●测试函数的调用
发布版本运行的比较快,完成了应用程序的开发时,一般应给用户提供发布版本,因为发布版本不需要调试版本所包含的符号信息。
在vs2010的术语中,应用程序可以处于运行状态,也可以处于中断模式,即暂停正常的执行。
下面首先介绍非中断模式(运行期间或正常执行)技术。
1.输出调试信息
在运行期间把文本写入Output窗口是非常简单的。只要用需要的调用替代Console.WriteLine()调用,就可以把文本写到希望的地方。此时可以使用如下两个命令:
●Debug.WriteLine()
●Trace.WriteLine()
这两个命令函数的用法几乎完全相同,但有一个重要区别。第一个命令仅在调试模式下运行,而第二个命令还可以用于发布程序。实际上,Debug.WriteLine()命令不能编译为可发布的程序,在发布版本中,该命令会消失。
2.跟踪点
另一种把信息输出到Output窗口中的方法是使用跟踪点。这是Visual Studio的一个功能,而不是C#的功能,但其作用与使用Debug.WriteLine()相同。它实际上是输出调试信息且不修改代码的一种方式。
3.诊断输出与跟踪点
前面介绍了两种输出相同信息的方法,下面看看它们的优缺点。
首先,跟踪点与Trace命令并不等价,也就是说,不能使用跟踪点在发布版本中输出信息。这是因为跟踪点并没有包含在应用程序中。跟踪点由VS处理,在应用程序的已编译版本中,跟踪点是不存在的。只用应用程序运行在VS调试器中时,跟踪点才起作用。
跟踪点的主要缺点也是其优点,即它们存储在VS中,因此可以在需要时快速、方便地添加到应用程序中,而且也非常容易删除。如果输出非常复杂的信息字符串,觉得跟踪点非常讨厌,只需要单击表示其位置的红色菱形,就可以删除跟踪点。
跟踪点的一个优点是允许方便的添加额外的信息,这个信息可以用Debug和Trace命令来编写,但比较难。
总结一下,输出调试信息的两种方法是:
● 诊断输出:总是要从应用程序中输出调试结果时使用这种方法,尤其是在要输出的字符串比较复杂,涉及几个变量或许多信息的情况下,使用该方法比较好。另外,如果要在发布模式下获得执行应用程序的调试结果,Trace命令常常是唯一的选择。
●跟踪点:调试应用程序时,希望快速输出重要信息,以便解决语义错误,应使用跟踪点。
其次介绍中断模式下的调试:
调试技术的剩余内容是在中断模式下工作。可以通过几种方式进入这种模式,这些方式都可以暂停程序的执行。
1.进入中断模式
断点
断点是源代码中自动进入中断模式的一个标记,它们可以配置为:
● 在遇到断点时,立即进入中断模式
● 在遇到断点时,如果布尔表达式的值为true,就进入中断模式
● 遇到某断点一定的次数后,进入中断模式
● 在遇到断点时,如果自从上次遇到断点以来变量的值发生了变化,就进入中断模式
● 把文本输出到Output窗口中
注意,上述功能仅能用于调试程序。如果编译发布程序,将会忽略所有断点。
2.监视变量的内容
查看变量值的最简单方式是在中断模式下,是鼠标指向源代码中的变量名,此时就会出现一个黄色的工具提示,显示该变量的信息,包括该变量的当前值。
3.单步执行代码
进入中断模式后,在代码视图的左边,正在执行的代码旁边会出现一个光标(如果使用断点进入中断模式,该光标最初应显示在断点的红色圆圈中),这显示了在进入中断模式时程序执行到的位置,可以选择逐行执行。
----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流!
----------------------
详细请查看:http://edu.csdn.net
相关文章推荐
- 关于不能调试C#代码的问题
- VS2015 C#调用C++ 托管代码无法调试问题排查
- C#不能调试非托管C++代码问题
- 在wince6.0用vs2005下远程调试c#代码断点空心问题解决方式
- VS2005(c#)项目调试问题解决方案集锦
- 这段发c#邮件的代码怎么在自己机器上调试时怎么经常发送不了邮件啊
- 解决在vc调试代码结束时候,不能把控制台黑屏目退出的问题
- 整理的c#winform窗体热键隐藏代码及存在的问题
- c#学习之--编写代码相关的问题
- VS2008 JS调试和Silverlight 后台代码调试 相互影响的问题。---自己做实例证明
- 谈谈C#和VB.NET代码的转换问题
- VS2005(c#)项目调试问题解决方案集锦
- 群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法【附C#群蚁算法完整项目代码】
- 使用GDB调试PHP代码,解决PHP代码死循环问题
- ECLIPSE远程调试出现如下问题 ECLIPSE中调试代码提示找不到源
- 代码调试过程中容易遇到的问题
- 艾伟:C#代码动态编译、动态执行、动态调试
- Android studio 调试NDK C++ 代码,遇到的问题
- 看不到代码 C#操作数据库的问题
- VS2005(c#)项目调试问题解决方案集锦