明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

在設(shè)計(jì)期跟蹤代碼 (.NET)

[摘要]在開發(fā)中碰到這樣的問題:winform窗口中定義了基類窗體,在設(shè)計(jì)器中打開子類窗體的時候出現(xiàn)諸如“窗口無法使用設(shè)計(jì)器進(jìn)行進(jìn)行設(shè)計(jì),發(fā)生了......的異!钡男畔,并且窗體無法打開,也就沒辦法使用窗體設(shè)計(jì)器進(jìn)行界面的設(shè)計(jì)。但是運(yùn)行起來一切正常。這個問題的原因就是在解決方案資源管理器中雙擊窗體打開進(jìn)...
在開發(fā)中碰到這樣的問題:

winform窗口中定義了基類窗體,在設(shè)計(jì)器中打開子類窗體的時候
出現(xiàn)諸如“窗口無法使用設(shè)計(jì)器進(jìn)行進(jìn)行設(shè)計(jì),發(fā)生了......的異!钡男畔,并且窗體無法打開,也就沒辦法使用窗體設(shè)計(jì)器進(jìn)行界面的設(shè)計(jì)。但是運(yùn)行起來一切正常。

這個問題的原因就是在解決方案資源管理器中雙擊窗體打開進(jìn)行設(shè)計(jì)的時候,會去執(zhí)行它的基類,也就是父窗體中的一些代碼,例如:

建立一個基類窗體,名為FormBase,再建立一個子類窗體FormDerive,從FormBase繼承
public class FormDerive : FormBase
{
private System.ComponentModel.Container components = null;

public FormDerive()
{

InitializeComponent();
}
...........................
}

然后在基類窗體的構(gòu)造函數(shù)中加句代碼:
public FormBase()
{

InitializeComponent();

MessageBox.Show("It's Base Form!");
}

編譯,然后雙擊“解決方案資源管理器”中的FormDerive打開設(shè)計(jì)器,這時會先有一個MessageBox彈出,然后顯示FormDerive的設(shè)計(jì)界面。

現(xiàn)在來讓FormBase中的代碼發(fā)生異常,寫一個最簡單的產(chǎn)生“數(shù)組越界”的代碼

string[] array = new string[]{"1","2","3"};
for ( int i = 0; i <= array.Length ; i++ )
{
MessageBox.Show(array[i]);
}

再次打開設(shè)計(jì)器,彈出對話框后設(shè)計(jì)器一片空白,提示:
?試圖創(chuàng)建 WindowsApplication12.FormBase 的實(shí)例時發(fā)生異常。異常為“索引超出了數(shù)組界限!
?
如果在FormBase的Load事件中插入導(dǎo)致異常的代碼,使用設(shè)計(jì)器時會出現(xiàn)同樣的現(xiàn)象。

如果基類中的代碼比較簡單,可以通過閱讀找到問題,那么代碼比較復(fù)雜呢?
現(xiàn)在才說到正題。

在.net中提供了一個調(diào)試工具DbgClr.exe,它可以在設(shè)計(jì)器進(jìn)行代碼的跟蹤。
如果你找不到這個文件,可以使用“搜索文件”找到它。

下面就是怎樣使用DbgClr跟蹤:
運(yùn)行DbgClr.exe
點(diǎn)擊菜單:工具-調(diào)試進(jìn)程,會列出目前系統(tǒng)的進(jìn)程。

選擇devenv.exe進(jìn)程,也就是VS.net集成開發(fā)環(huán)境,點(diǎn)附加。關(guān)閉對話框。
在DbgClr中打開要調(diào)試的.cs文件,這里選擇FormBase.cs文件

然后在FormBase的構(gòu)造函數(shù)進(jìn)行for循環(huán)的地方加上斷點(diǎn)。
重新打開FormDerive,這時會在DbgClr中中斷,可以進(jìn)行調(diào)試了。

總結(jié):我碰到出現(xiàn)這種窗體打不開的情況重要是在讀取一些配置文件時產(chǎn)生的,就是在設(shè)計(jì)期指定的路徑下沒有指定的文件,但是在運(yùn)行時使用生成后事件把文件拷貝過來,所以運(yùn)行期沒問題。

這問題搞了我好半天吶,知道了調(diào)試的方法,再出現(xiàn)這問題就不怕了。

DbgClr.exe的使用在幫助里有講解,我以前怎么就沒有注意到呢:
.NET Framework->工具和調(diào)試器->CLR 調(diào)試器