VS中⽤C#开发应⽤程序的调试⼊门、技巧和实例(转载)
⼊门篇
假设你是有着.Net平台的程序员,并且使⽤Visual Studio 做为开发⼯具。
断点:最简单的⼀种,设置⼀个断点,程序执⾏到那⼀句就⾃动中断进⼊调试状态。设置断点,在你觉得有问题的代码⾏,左侧单击,会出现红⾊的红点即断点。
启动调式:按F5,或者菜单栏---调式---开始调试,或者⼯具栏的图标
快速监视:快速查看变量或者表达式的值,也可以⾃定义表达式进⾏计算
单步执⾏
有三种,⼀种是每次执⾏⼀⾏(F10);⼀种是每次执⾏⼀⾏,但遇到函数调⽤就会跳到被调⽤的函数⾥(F11);⼀种是直接执⾏当前函数⾥剩下的指令,返回上⼀级函数(Shift+F11)。
还有⼀种后悔药,设为下⼀句(Set Next Statement),即下⼀句会被执⾏的语句(右击设置或者快捷键:Ctrl+Shift+F10),但要注意在调试与数据有关的时候,设置下⼀句有可能会报异常。如在调试向DataTable中添加⾏的时候,已经存在的⾏不能重复被添加到DataTable中。
监视
调试器可能会⾃动列出⼀些相关变量的值,但是你可能还关⼼其它变量的值,可以添加对这些变量的监视。还可以监视⼀个表达式的值,⽐如a+b。但是,这个表达式最好不要修改变量的值,⽐如监视a++都会导致监视时修改了a的值,影响了程序的运⾏结果。
调试技巧
使⽤快捷键会⼤⼤提升我们的调试效率,常⽤的调试快捷键:
F5 启动调试
F10 执⾏下⼀⾏代码,但不执⾏任何函数调⽤。
F11 在执⾏进⼊函数调⽤后,逐条语句执⾏代码。
Shift + F11 执⾏当前执⾏点所处函数的剩余⾏。
Shift + F5 停⽌运⾏程序中的当前应⽤程序。可⽤于“中断”模式和“运⾏”模式。
拖动断点
在调试中,我们可以拖动断点,使得程序运⾏到我们想要运⾏的地⽅。通常是⽤来验证这段代码对程序的运⾏结果有没有影响的。因为我们拖动代码,则被过滤的代码就不会执⾏,将它跟原来的相⽐,可以看出去掉这段代码有什么影响
条件中断
假如你写了个for循环,⽽且循环的次数⽐较多,如下代码,现在我们知道在i=50的时候会有异常,那我们不可能按50次F5去调试这代码,不然这效率….
private void ConditionDebug()
{
for (int i = 0; i < 100; i++)
{
if (i==50)
{
/
/some error code here
Console.WriteLine( "i=50 here");
}
}
}
我们可以直接利⽤vs提供的功能修改变量i的值,⼀开i=0,即刚进⼊for循环中,我们设置将i改为49并回车,再调试⼀次,会发现i=50;如下图
当然我们也可以直接在代码⾥写代码以达到这个⽬的,代码如下
private void ConditionDebug()
{
for (int i = 0; i < 100; i++)
{
System.Diagnostics.Debug.Assert(i != 50);
if (i==50)
{
//some error code here
Console.WriteLine( "i=50 here");
安卓开发实例入门}
}
}
使⽤了调试中的Assert(断⾔),当执⾏程序后会弹出如下的提⽰框,点击Ingore(忽略)即可,
Immediate Window
Immediate window在调试的时候计算表达式的值、执⾏语句、打印变量的值等。我们输⼊命令(注意⼀定要以“>”开头),会有智能提⽰,⽽且命名都是⾃解释型。
如,我们现在想要知道i的值,可以输⼊命名>Debug.Print i(也可以简单的使⽤>? i),如下图
Immediate window还有更强⼤的⽤法,计算⽅法的返回值(如果有的话)
如果有这个的函数
int MethodValue(int a)
{
if (a==1)
{
return 1;
}
else
{
return 0;
}
}
我们可以使⽤Immediate命令 >? class.Method(args) 去调⽤这个⽅法,如下图
其中p是当前类的实例(因为MethodValue是类的⽅法,注意?和表达式之间要有空格)
对于⼀些实时性很⾼的程序(如socket)使⽤ Debug.Write()把错误写到⽇志⽂件中,.Net可以将Debug信息写到你指定的⽂件中,记住,写进出的信息不⼀定是出错的信息,也可以是你的程序的运⾏的⼀些重要信息,当你调试过程中发现某个模块出了问题,但是不能决定位置,那你就可以使⽤这个⽅法,如果是⼀天才出⼀个错误,那你就更要使⽤这个⽅法。
实例篇
涉及到WS(WebServices)的调试
在基于WinForm的实际开始开发中,我们往往采⽤WS⽤做数据的传递,我们在前台获取收集数据,通
过WS将数据传递给,后台做相应的业务逻辑处理后,会持久到数据库中。⽽往往我们⼜会在WS中写⼀些相关的代码,如⾝份验证、⽇志记录、提⽰信息等,怎样去调试这些
代码呢。
涉及到JavaScript的调试
许多程序员为调试JavaScript感到困惑不已,因为没有⼀款很好的调试⼯具。⼀些⼈喜欢使⽤FireBug来调试JavaScript,确实是⼀个不错的选择,Firebug提供了许多的JavaScript信息,是⼀款不错的调试JavaScript的⼯具。下⾯我将会介绍如何使⽤Visual Studio调试JavaScript,Visual Studio中调试JS跟调试C#差不多,都是设置断点,不同的是我们在查看元素值的时候需要注意点。
涉及到的调试
现在ajax已经⼗分的流⾏,但是随之⽽来的即调试困难,⼤部分初级程序员不知道如何有效地从前台调试到后台代码,以⾄出了很多不完善的ajax应⽤。
下⾯以⼀个简单的实例来介绍如何使⽤Visual Studio调试JavaScript。实例是使⽤Ajax验证⽤户登录,如果验证通过,则提⽰“登录成功”,否则提⽰“登录失败”。
下⾯是主要的代码,我们使⽤jQuery来实现ajax,并且在后台⽂件中故意出错。
正确的⽤户名和密码是admin和1
调试⽅法如下,在后台⼊⼝处设置断点,然后在前台js中调⽤后台的⽅法处设置断点,然后按F5启动调试,当我们输⼊⽤户名、密码后,点击登录后会发现,前台断点被触发了。
按F5继续调试,有时候会跳到jQuery的源码中,不管他,继续F5,会发现执⾏到后台中的断点中,如下图
⽽后台代码的调试是⼗分简单的。(PS:有时候⽆需在前台设置断点也可直接进⼊后台的调试,如何不⾏的话,在前台html⽂件或者x⽂件中认为有可能出错的地⽅设置断点,⼀步步调试)
⼀些调试中出现的常见错误(会陆续更新):
1.我们调试到某⼀句代码的时候,突然莫名奇妙的跳出来了,其实是刚刚执⾏的这⼀句话有异常,我们可以使⽤try…catch进⾏异常捕获,看看异常原因是什么,然后做相应的处理
2.在ADO.NET,我们会使⽤ds.Merge()⽅法进⾏合并内存表,如果有异常的话,⼀般有以下三种情况:
A.其中⼀张表中有两⾏⼀模⼀样的数据,包括主键
B.这两张表的结构不⼀致
C.两张表中某个字段的类型不匹配,如字段age在A表中式string,⽽在B表中确是Decimal
⼤家如果也有收集⼀些常见的错误,期盼能够分享
会发现此时i已经为50了,有兴趣的朋友可以看看Assert的其他⽤法。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论