.Net程序调试与追踪的一些方法

前言

作为一个.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); } }
DebugOut

使用这个办法,我可以做到一个程序,当以控制台服务时,就输出到控制到,当以服务进程运行之后,调试信息可以被收集工具收到到,而我们的代码还是调用Console.WriteXXX。

 

远程动态调试

希望没走到这步就可以解决问题,远程调试的要求还是比较高的:

1、远程的程序必须带pdb文件,最好与本机的代码是完全一样的;

2、vs附带的“远程调试工具”复制到远程机器上,根据x86或x64系统运行对应的调试服务端;

3、vs->调试->附加到进程,传输为“远程(远程无身份验证)”,“限定符”为远程机器的ip或域名;

 

结束

以上是个人现在常用的调试与追踪方法,你也可以把你的其它好点子分享分享。

转载于:https://www.cnblogs.com/MuNet/p/8544837.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: .NET高级调试指的是针对.NET Framework应用程序进行更加深入的程序调试。常见的.NET应用程序调试工具有Visual Studio、WinDBG、CLRDBG等。而.NET高级调试需要掌握.NET程序执行流程、内存管理等知识,以及掌握调试工具的使用方法。 其中PDF文件是常见的文件格式之一,也有涉及到.NET高级调试的相关内容。通过阅读《.NET高级调试PDF》可以深入了解如何使用调试工具,检测和解决各种.NET应用程序的问题。该文档可以向.NET开发者提供较为全面的建议和指南,使他们能够获得更深层次的调试技能和经验。此外,该文档还可帮助开发人员了解.NET应用程序的整个生命周期,从而更好地定位和解决各种问题。通过读取《.NET高级调试PDF》,开发人员可以更快地诊断和解决问题,提高应用程序的质量和稳定性。 总之,NET高级调试PDF提供了深层次的应用程序调试经验和技巧,可以帮助.NET应用程序开发人员更好地理解和解决程序中的问题。 ### 回答2: .NET高级调试是指通过深入了解.NET框架的内部运作机制,实现对.NET应用程序的高级级调试。为了保证.NET应用程序的稳定性和可靠性,开发人员需要借助一些高级调试技术,对应用程序进行逐层调试和动态追踪,确保在调试过程中不会影响应用程序的正常运行。 PDF是一种开放标准的文档格式,可以在不同平台上兼容,保证文档的可读性和可靠性。因此,将.NET高级调试和PDF文档结合起来,可以方便地将高级调试的技术与实践经验以文档的形式传递给其他开发人员,提高.NET应用程序的开发效率和质量水平。 在.NET高级调试PDF中,开发人员可以学习到一些高级调试技术,比如使用反射和元数据查看应用程序的运行状态,通过调试符号和源代码调试执行过程,利用.NET自带的分析工具检测和分析应用程序,以及使用第三方调试工具进行高级调试。 此外,.NET高级调试PDF还可以介绍一些.NET框架的内部运作机制和原理,如CLR(公共语言运行时)的内存管理、垃圾回收机制和安全性管理等,在深入了解这些原理的基础上,可以更好地理解和优化应用程序的运行效率和性能。 总之,将.NET高级调试和PDF文档相结合,可以为.NET开发人员提供一个全面、详尽的高级调试指南,帮助他们更好地掌握.NET的高级调试技术,提高应用程序的质量和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值