当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 在设计期跟踪代码 .NET

ASP.NET
FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法
.NET 常用功能和代码小结
在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出
asp.net IList查询数据后格式化数据再绑定控件
asp.net sql存储过程
asp.net 简单实现禁用或启用页面中的某一类型的控件
asp.net(c#)获取内容第一张图片地址的函数
The remote procedure call failed and did not execute的解决办法
ASP.NET 在线文件管理
asp.net 读取并修改config文件实现代码
ASP.NET Cookie 操作实现
asp.net Silverlight中的模式窗体
Silverlight中动态获取Web Service地址
asp.net Silverlight应用程序中获取载体aspx页面参数
asp.net 水晶报表隔行换色实现方法
asp.net 获取Gridview隐藏列的值
手动把asp.net的类生成dll文件的方法
asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页
动态指定任意类型的ObjectDataSource对象的查询参数
asp.net Md5的用法小结

ASP.NET 中的 在设计期跟踪代码 .NET


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 67 ::
收藏到网摘: n/a


在开发中碰到这样的问题:winform窗口中定义了基类窗体,在设计器中打开子类窗体的时候出现诸如“窗口无法使用设计器进行进行设计,发生了......的异常”的信息,并且窗体无法打开,也就没办法使用窗体设计器进行界面的设计。但是运行起来一切正常。
这个问题的原因就是在解决方案资源管理器中双击窗体打开进行设计的时候,会去执行它的基类,也就是父窗体中的一些代码,例如:
建立一个基类窗体,名为FormBase,再建立一个子类窗体FormDerive,从FormBase继承public class FormDerive : FormBase{private System.ComponentModel.Container components = null;
public FormDerive(){InitializeComponent();}...........................}
然后在基类窗体的构造函数中加句代码:public FormBase(){InitializeComponent();
MessageBox.Show("It's Base Form!");}编译,然后双击“解决方案资源管理器”中的FormDerive打开设计器,这时会先有一个MessageBox弹出,然后显示FormDerive的设计界面。
现在来让FormBase中的代码发生异常,写一个最简单的产生“数组越界”的代码
string[] array = new string[]{"1","2","3"};for ( int i = 0; i <= array.Length ; i++ ){MessageBox.Show(array[i]);}再次打开设计器,弹出对话框后设计器一片空白,提示:?试图创建 WindowsApplication12.FormBase 的实例时发生异常。异常为“索引超出了数组界限。”?如果在FormBase的Load事件中插入导致异常的代码,使用设计器时会出现同样的现象。
如果基类中的代码比较简单,可以通过阅读找到问题,那么代码比较复杂呢?现在才说到正题。在.net中提供了一个调试工具DbgClr.exe,它可以在设计器进行代码的跟踪。如果你找不到这个文件,可以使用“搜索文件”找到它。下面就是怎样使用DbgClr跟踪:运行DbgClr.exe点击菜单:工具-调试进程,会列出目前系统的进程。选择devenv.exe进程,也就是VS.net集成开发环境,点附加。关闭对话框。在DbgClr中打开要调试的.cs文件,这里选择FormBase.cs文件然后在FormBase的构造函数进行for循环的地方加上断点。重新打开FormDerive,这时会在DbgClr中中断,可以进行调试了。

总结:我碰到出现这种窗体打不开的情况重要是在读取一些配置文件时产生的,就是在设计期指定的路径下没有指定的文件,但是在运行时使用生成后事件把文件拷贝过来,所以运行期没问题。
这问题搞了我好半天呐,知道了调试的方法,再出现这问题就不怕了。
DbgClr.exe的使用在帮助里有讲解,我以前怎么就没有注意到呢:.NET Framework->工具和调试器->CLR 调试器