读书网站建设策划书摘要,推荐网站建设案例,网站建设xiduyun,网络推广方案联系昔年下拉前言
作为一个.net开发工程师#xff0c;不管是在写桌面程序、服务程序或web程序#xff0c;在开发阶段#xff0c;我们必须非常熟悉vs的动态调试技能#xff0c;当然web程序可能还需要调试前端的脚本或样式#xff0c;这不在本文的讨论范围。本文主要介绍vs的动态调试基…前言
作为一个.net开发工程师不管是在写桌面程序、服务程序或web程序在开发阶段我们必须非常熟悉vs的动态调试技能当然web程序可能还需要调试前端的脚本或样式这不在本文的讨论范围。本文主要介绍vs的动态调试基本知识以及介绍如何追踪已发布的程序的调试日志或技能。
开发阶段
本阶段主要以动态调试为主调试的利器当然是vs。
动态调试步骤
1、拥有程序的代码和pdb文件
2、在你要观察逻辑代码行号下断点
3、vs-调试-开始调试你可能需要条件来触发让程序执行到你要的逻辑代码行号
4、对于已运行的程序你也可以vs-调试-附加到进程 来完成启动调试如果已运行的程序是服务进程非桌面进程在附加到进程对话框要勾选上“显示所有用户的进程”
断点的条件过滤
在动态调试中如果在多线程环境一个断点断到之后如果使用“逐语句”到下语句的话断点又会马上被断到造成跟踪上下文很不方便还一种情况在循环体里下断但是只想跟踪符合一定条件的点。这些时候应使用条件断点在某代码行号下断然后右键左边红色断点实圈弹出的菜单里可以给断点设置条件设置条件之后的断点叫条件断点vs显示为红色的虚圈。 生产阶段
本阶段以追踪为主追踪应用程序的日志文件、调试信息输出和异常等不得以的情况下可以使用远程动态调试来调试。
日志文件
可能你第一时间就想到log4net没错它可以将一些调试信息和异常信息写入文件或db很方便查询。除此之外我们应该还要了解 Exceptionless 它的强大之处在于更完善的异常上下文内容收集、异常分类显示与汇总在Exceptionless 查看异常信息几乎就可以静态分析出异常的原因从而直接修改代码。 收集调试信息
由于性能的原因日志文件里我们一般只记录重要的和异常的内容不太重要的产生又频繁的内容在控制台的时候我们可以使用Console.WriteXXX将这些内容实时显示。实际上只要调用 System.Diagnostics.Debugger的Log方法这个方法输出的内容在不调试的情况下也可以使用一些工具进行捕获这些输出内容以下为提供的两个收集工具。
1、使用DebugViewer工具进行收集
这个工具是我使用.net来编写的收集程序UI很好友已开源托管在github上面了。 2、使用debugview工具进行收集 收集Console.WriteXXX的内容
在写控制台程序的时候Console.WriteXXX能方便我们追踪但在非控制台程序比如服务进程、windows桌面应用和web应用)这些Console.WriteXXX实际上是不产生任何输出的。现在我们的目标是在非控制台类型的应用只要调用了Console.WriteXXX也能让收集工具能收集到这些输出信息。
1、在程序初始化的时候替换Console静态类的Out属性Console.SetOut( debugOut )
2、实现自己的DebugOut将Write的内容输出到Debugger.Log方法 public class DebugOut : System.IO.TextWriter{ public override void Write(char[] buffer, int index, int count){ var message new string(buffer, index, count);System.Diagnostics.Debugger.Log(0, null, message);}}
使用这个办法我可以做到一个程序当以控制台服务时就输出到控制到当以服务进程运行之后调试信息可以被收集工具收到到而我们的代码还是调用Console.WriteXXX。 远程动态调试
希望没走到这步就可以解决问题远程调试的要求还是比较高的
1、远程的程序必须带pdb文件最好与本机的代码是完全一样的
2、vs附带的“远程调试工具”复制到远程机器上根据x86或x64系统运行对应的调试服务端
3、vs-调试-附加到进程传输为“远程远程无身份验证”“限定符”为远程机器的ip或域名 结束
以上是个人现在常用的调试与追踪方法你也可以把你的其它好点子分享分享。
原文地址http://www.cnblogs.com/kewei/p/7096905.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注