温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

.NET中怎么对异常进行快速定位

发布时间:2020-12-09 16:47:51 来源:亿速云 阅读:156 作者:Leah 栏目:开发技术

.NET中怎么对异常进行快速定位?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一:定位本机异常

在我们本机定位异常很容易。假设我们都是使用的的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定位异常的方法。

首先我们使用IE浏览器打开silverlight应用程序,然后打开windbg附件到IE进程来调试。附加进程的方式可以通过File菜单下的Attach to a process或者使用F6快捷键。

 .NET中怎么对异常进行快速定位

附件进程后 程序会中断到调试器,这个时候我们需要做两个设置。

一个是 设置程序发生异常时让其中断到调试器,设置方法是打开debug菜单下的Event Filter,将CLR异常设置其为enable。

 .NET中怎么对异常进行快速定位

另外需要加载调试器扩展,使用过windbg的朋友都知道调试.net程序需要加载一个调试器扩展sos.dll。这个sos.dll也有一个Silverlight版本的。

位置在silverlight的安装目录 C:\Program Files (x86)\Microsoft Silverlight\5.1.10411.0\sos.dll。

我们再command窗口中输入 .load C:\Program Files (x86)\Microsoft Silverlight\5.1.10411.0\sos.dll 来加载它。

之后输入命令 g 来回复程序的执行。当发生异常时就会中断到调试器中。

发生异常是我们可以使用!pe(print exception) 来查看异常信息。如下图:

 .NET中怎么对异常进行快速定位

如果想查看堆栈信息的话可以输入命令 !clrstack

.NET中怎么对异常进行快速定位

看完上述内容,你们掌握.NET中怎么对异常进行快速定位的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ne
AI