




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.NET软件调试,主要内容 调试与测试 掌握基本的调试能力 Visual Studio .NET 2005基本调试技巧 断言与跟踪 .NET中的Diagnostics类的使用,.NET软件调试,调试与测试,调试是确保软件正常工作的基本方法 调试是诊断问题的重要手段,是一个bug被精确定位、修正后重新验证的主要方法 调试的基本手段是跟踪,通过跟踪代码在运行时的状况可以发现程序中绝大多数的问题 经验:程序调试是开发人员必备的基本素质,掌握好调试技术,是程序开发的关键技术,在实际的开发工作中,绝大多数的bug是通过程序调试来找到问题并解决的,掌握基本的调试能力,测试人员为什么要掌握基本的调试能力 测
2、试的目的是除了发现问题,还要给开发人员提供更详细的出错信息 详细的出错信息不但是要提交出错的现象,更重要的是还能提供错误代码的上下文及相关信息 经验:无论是白盒测试,还是黑盒测试,都应该掌握基本的调试技巧,Visual Studio.NET2005基本调试技巧,断点设置 F9 是切换断点的功能键,再次按F9为取消断点操作 断点设置是为了在程序运行的过程中暂停,以便查看程序当前的状态 设置断点后,以调试运行的方式执行程序,则在碰到断点的代码将自动暂停,Visual Studio.NET2005基本调试技巧,Visual Studio.NET2005基本调试技巧,调试输出 设置好断点后,按F5快捷
3、键将启动调试,以调试方式运行代码,在Visual Studio.NET 2005的“输出窗口”,会显示程序加载各种DLL的情况,Visual Studio.NET2005基本调试技巧,在输出窗口可以看到程序启动时需要加载的组件信息,包括组件名称及其所在磁盘的位置,Visual Studio.NET2005基本调试技巧,变量监视 运行的程序在碰到断点的时候将自动暂停执行,这时可在“局部变量”或者“即时”窗口看到当前函数的所有局部变量的值 变量名称 变量当前值 变量的类型,Visual Studio.NET2005基本调试技巧,局部变量窗口:显示所有局部变量当前状态 即时窗口:可以指定显示的变量当
4、前状态,Visual Studio.NET2005基本调试技巧,调用堆栈 在“调用堆栈”窗口,可以看到在断点之前,程序中函数执行的顺序 注意窗口中的函数显示顺序,Visual Studio.NET2005基本调试技巧,函数的执行顺序是以倒序的方式排列,最先执行的函数排在最后一行,而当前正在执行的函数在第一行 注意:1. 堆栈的对于我们调试程序非常有用,特别是在程序出错时,跟踪堆栈可以找到程序出错的具体位置 2. 有很多测试工具,它的作用就是在程序出错时打印当前出错的代码堆栈,根据堆栈可以很快发现问题,Visual Studio.NET2005基本调试技巧,逐过程调试 在断点处,如果要继续执行程
5、序,按快捷键F5,程序会直接运行到下一个断点的代码行处 在断点处按F10快捷键可以一行一行的执行代码,Visual Studio.NET2005基本调试技巧,逐语句调试 逐过程调试并不能一步步执行每条语句,当代码中有函数调用时,会跳过函数体 快捷键F11可以进入到函数体内进行调试,Visual Studio.NET2005基本调试技巧,WriteLine方法的使用 为了在程序运行过程中能清楚掌握当前的运行情况,我们加入一些信息的输出语句(程序运行日志) private int max(int val1, int val2) Console.WriteLine(val1的值= + val1);
6、Console.WriteLine(val2的值= + val2); int maxval = 0; if (val1 val2) maxval = val1; else maxval = val2; Console.WriteLine(返回的最大值是: + maxval); return maxval; ,Visual Studio.NET2005基本调试技巧,当一个程序运行时,可以通过后台输出窗口监控当前的运行情况,一旦程序运行异常,根据输出窗口打出的日志,可以很快发现问题 特别是针对没有用户界面的程序,日志能起到很大的调试作用,Visual Studio.NET2005基本调试技巧,提醒
7、:我们在做项目开发的时候,往往都会先开发一个功能很全的日志模块,这个日志模块能嵌入到项目的所有代码中,利用这个日志模块来显示整个程序进行的流程信息 日志显示在项目开发中很重要,是我们监控程序正常运行的重要依据,断言与跟踪,Debug类的使用 断言是测试一个条件,如果条件为真(true),则通过,如果条件为假(false),则弹出错误对话框,在对话框中可以看到出错的代码行 用Debug类中的Assert方法实现断言 private void button1_Click(object sender, EventArgs e) int a = 0, b = 0; Debug.Assert(textB
8、ox1.Text.Length 0, “输入值不能为空); a = Int32.Parse(this.textBox1.Text); b = Int32.Parse(this.textBox2.Text); int val = max(a, b); ,断言与跟踪,Assert方法只是在Debug编译版本中有效,断言与跟踪,在使用断言时注意的问题 因为断言只在Debug版本里才执行,在Release版本中是不会执行这条语句的,所以断言语句里不能有改变局部或者全局变量的值,否则程序在Release版本中运行时会出现问题。 Debug.Assert(Func(变量1) 0, “出错);,断言与跟踪,
9、Trace类的使用 Trace类和Debug类类似,使用方法也基本相同 区别 Debug类的断言代码不会编译到Release版本中去 Rrace类的断言代码会编译到Release版本中去 缺点是会增加Release版本的程序大小,降低程序运行效率 Trace.Assert(textBox1.Text.Length 0, “输入值不能为空);,.NET中的Diagnostics类的使用,System.Diagnostics 命名空间 提供用于调试应用程序和跟踪代码执行情况的类(Debug、Trace) 提供特定的类,使我们能够与系统进程、事件日志和性能计数器进行交互,代表性的类: EventLo
10、g类 Process类 PerformanceCounter类 用这些类我们可以使问题的跟踪和定位更准确和方便,.NET中的Diagnostics类的使用,EventLog类 通过它,我们可以访问Windows的事件日志 写入事件日志 读取事件日志项 创建和删除事件日志,.NET中的Diagnostics类的使用,示例:用EventLog类往事件日志中写入信息 if (!EventLog.SourceExists(MySource) EventLog.CreateEventSource(MySource, MyNewLog); EventLog myLog = new EventLog();
11、myLog.Source = MySource; myLog.WriteEntry(Writing to event log.);,.NET中的Diagnostics类的使用,Process类 监视整个网络的系统进程以及启动和停止本地系统进程 查看有关当前可访问处理器的进程的信息 获取有关进程线程和模块的详细信息,.NET中的Diagnostics类的使用,实例1:用Process类启动一个画笔程序 Process pro = new Process(); pro.StartInfo.FileName=C:windowssystem32mspaint.exe; pro.Start(); Mes
12、sageBox.Show(pro.StartTime.ToString();,.NET中的Diagnostics类的使用,实例2:用Process类查看指定进程加载的模块信息 Process pro = new Process(); pro.StartInfo.FileName=C:windowssystem32mspaint.exe; pro.Start(); for (int i = 0; i pro.Modules.Count; i+) Console.WriteLine(pro.Modulesi.ToString(); ,.NET中的Diagnostics类的使用,运行结果:,画图程序
13、运行后加载的模块,.NET中的Diagnostics类的使用,实例3:用Process类查看指定进程加载模块所需的内存信息 Process pro = new Process(); pro.StartInfo.FileName=C:windowssystem32mspaint.exe; pro.Start(); for (int i = 0; i pro.Modules.Count; i+) Console.WriteLine(pro.Modulesi.ToString(); Console.WriteLine(pro.Modulesi.ModuleMemorySize.ToString();
14、 ,.NET中的Diagnostics类的使用,运行结果:,画图程序运行后加载的模块内存信息,.NET中的Diagnostics类的使用,利用Process类查看进程内的线程信息 可以查看线程的ID、线程启动的时间、线程的状态、线程使用的处理器时间总量,.NET中的Diagnostics类的使用,实例4:用Process类查看画图程序相关线程的当前状态 for (int i = 0; i pro.Threads.Count; i+) /获取进程ID string ID = pro.Threadsi.Id.ToString(); /获取进程状态 string ThreadState = pro.
15、Threadsi.ThreadState.ToString(); Console.WriteLine(“线程”+ID+“当前状态:”+ThreadState); ,.NET中的Diagnostics类的使用,运行结果:,.NET中的Diagnostics类的使用,实例5:用Process类监视进程的性能问题 while (pro.HasExited = false) Console.WriteLine(占用物理内存:“ + pro.WorkingSet.ToString(); Console.WriteLine(“占用虚拟内存: “ + pro.VirtualMemorySize.ToString(); Console.WriteLine(占用处理器的时间:“ + pro.TotalProcessorTime.ToString(); ,.NET中的Diagnostics类的使用,查看某个进程使用物理内存、虚拟内存、以及占用处理器时间等信息,运行结果:,.NET中的Diagnostics类的使用,PerformanceCounter类 Diagnostics中专门提供的类来监视
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年汽车维修工考试的时事新闻关联分析与试题及答案
- 探索二手车评估师职场内的挑战试题及答案
- 2025年采泥器项目发展计划
- 预防宠物营养缺乏症的考点分析试题及答案
- 促销策略效果分析小自考试题及答案
- 2024-2025岗前安全培训考试试题及答案7A
- 25年公司主要负责人安全培训考试试题(巩固)
- 2025厂级员工安全培训考试试题(典型题)
- 2024年汽车自检常识与方法试题及答案
- 2024-2025公司及项目部安全培训考试试题答案可下载
- 《肌力训练》课件
- 招标投标法培训课件
- 针灸治疗呃逆
- 2024年中考英语复习:阅读七选五 专项练习题汇编(含答案解析)
- 《吸收与解吸》课件
- 综合实践活动(1年级下册)第1课时 走近身边孝顺的好榜样-课件
- 初中信息技术教学中的项目式学习
- 部编版语文二年级下册第3单元核心素养教案
- DB43-T 1712-2019 银行业金融机构智能预警系统安全防范要求
- 2023年云南省接受军转干部安置考试试题
- 初三英语试卷分析失分原因和改进措施
评论
0/150
提交评论