首页 > 编程 > .NET > 正文

.NET程序调试技巧(一):快速定位异常的一些方法_.Net教程

2024-07-10 12:53:11
字体:
来源:转载
供稿:网友

推荐:浅谈ASP.NET中多层架构
Asp.net的多层架构主要是为了解决数据层,逻辑层,表示层等之间的关系。我的做法是这样的:首先建立一个DataCore的基类。基类里面封装了一些低层的数据库的基本操作,比如说数据库联接,调用存储过程等等。 很多人对开发多层应用程序感到一定的困难。来看一个例子:对

   这篇文章主要介绍了.NET程序调试技巧(一):快速定位异常的一些方法,本文讲解了定位本机异常、在客户环境定位.net程序异常两方面的内容,需要的朋友可以参考下

  作为一个程序员,解BUG是我们工作中常做的工作,甚至可以说解决问题能力是一个人工作能力的重要体现。因为这体现了一个程序员的技术水平、技术深度、经验等等。

  那么在我们解决BUG的过程中,定位问题是非常重要的。有句话叫"发现问题是解决问题的一半。

  本文讲述就快速定位异常(专指.NET程序异常)的方法。包括在本机定位异常,在客户环境定位.net程序异常,在客户环境定位SilverLight异常。

  一:定位本机异常

  在我们本机定位异常很容易。假设我们都是使用的的VisualStudio,那么只需要在调试->异常菜单中将Common Langeuage Runtime Exception(CLR异常)勾选。如下图:

.NET程序调试技巧(一):快速定位异常的一些方法

  在上面的图片中可以发现有5种类型的异常,例如c++异常、win32异常等等。对于.NET程序来说我们只关注CLR异常。

  接下来进行调试,当自己的程序代码中有异常的时候,VS就会自动定位到异常的位置。

  我们可以看到异常的详细信息,并且可在调用堆栈窗口中看到 程序的堆栈信息。在堆栈信息中我们可以看到在哪个类、哪个函数中出的错,如下图:

.NET程序调试技巧(一):快速定位异常的一些方法

  调试程序有两种方式,一种是用VS直接启动程序,另一种是附加到进程。

.NET程序调试技巧(一):快速定位异常的一些方法

  附加到进程的时候,程序类型不要选错了,我使用的是.net4.0 所以程序类型选择的是 托管(4.0版)代码。

  另外附加到进程有个快捷键是 Ctrl+Alt+P。

  但是如果异常不是你的代码中抛出的,那么如何定位呢?

  可以打开 调试 菜单下面的 选项和设置,将 启用"仅我的代码" 这一项取消勾选。那么别人代码中的异常就可以抛出了。

.NET程序调试技巧(一):快速定位异常的一些方法

  二:在客户环境定位 .net 程序异常:

  我们的程序最后都会运行在客户的环境中,客户环境上不会有VS这样的开发工具,那么怎么办呢?

  我们可以使用一个很小巧的命令行调试工具Mdbg.exe,这个工具是安装VS的时候附带安装的,仅能调试.net托管代码。

  Mdbg.exe其实有很多功能,不过本文只讲它定位异常的功能,后续文章会讲使用Mdbg.exe单步调试的方法。

  Mdbg.exe命令详细介绍可以 输入 h(help) 或者? 名来查看,也可以看下面的链接,

  http://msdn.microsoft.com/zh-cn/ms229861(vs.80).aspx#

  根据CLR版本的不用,Mdbg.exe也是有多个版本的。

  C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Bin/Mdbg.exe用于调试

  CLR2.0(对应net2.0,3.0,3.5)程序。

  C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Bin/NETFX 4.0 Tools/Mdbg.exe用于调试CLR4.0程序(对用.net4.0)。

  另外Mdbg.exe有一个依赖DLL 叫做MdbgCore.dll。我们可以直接将相应版本的Mdbg.exe和MdbgCore.dll拷贝到客户机器上使用。

  没有安装VS的朋友可以拷贝我自己封装的一个安装包 http://xiazai.jb51.net/201506/other/U8DebugSetup.rar,这里面除了Mdbg.exe还有一些其他组件我们后面的文章会用到。

  默认会安装在 C:/Program Files/U8Debug。

  Mdbg.exe的使用方法很加简,双击打开它,然后输入 a(attach , 显示附加的进程),回车,这时会列表所有可以附加的进程。

.NET程序调试技巧(一):快速定位异常的一些方法

  PID 表示进程标识,

  输入a 11940 附件到 ConsoleApplication2.ex示例程序。

  这时程序会中断执行,我们在这个时机可以做一些设置。让程序在遇到异常时自动中断。

  输入命令 ca (catch)查看当前调试器遇到哪些事件会中断。

.NET程序调试技巧(一):快速定位异常的一些方法

  可以看到 Exception对应的是Igonre all exception ,也就是忽略所有异常,发生异常时不会中断。

  输入命令 ca ex 这样调试器遇到异常时就会中断了。

  再次输入ca 命令会看到 Exception对应的值已经变为Stop on all exception了。这时遇到任何异常都会中断了。

.NET程序调试技巧(一):快速定位异常的一些方法

  输入命令 g 让程序继续执行。

  当遇到异常时会自动中断到调试器,如下图:

.NET程序调试技巧(一):快速定位异常的一些方法

  入命令 w(where,程序运行到哪里了) 可以查看异常堆栈信息

.NET程序调试技巧(一):快速定位异常的一些方法

  三:在客户环境定位SilverLight异常

  如果客户的silverlight应用服务器部署在外网,那么我们可以直接用浏览器访问该silverlight站点,然后用VS附加到浏览器进程来调试。

.NET程序调试技巧(一):快速定位异常的一些方法

  调试方法比调试普通.net程序一样。

  但是如果,客户的Silverlight服务器是部署在内网,那么你只能在客户机器上调试了。

  并且Mdbg.exe也帮不了你了,它不能调试Silverlight程序。

  我们还有另一个著名的调试工具Windbg。体积大概有不到20M,很容易安装到客户机,安装包大家可以到网上自己下载。windbg分为32位和64位两个版本,

  调试32位的程序请使用32位windbg,反之则要使用64位的windbg,具体为什么我们不用深究,记住了就可以了。

  相比Mdbg.exe的小巧实用,Windbg显然强大的多,但是使用起来也复杂一些。

  Windbg其实可以调试很多种类型的程序,例如普通.NET程序,c++等。但是本文只讲解使用windbg定位异常的方法。

分享:ASP.NET缓存处理类实例
本文实例讲述了ASP.NET缓存处理类。分享给大家供大家参考。具体如下: ASP.NET 缓存处理类。 用法: Just copy this code into a new class file (.cs) and add it to your ASP .NET website. One thing to keep in mind is that data stored in ASP .NET Cache can be

共2页上一页12下一页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表