在設計期跟蹤代碼 (.NET)
發表時間:2024-06-20 來源:明輝站整理相關軟件相關文章人氣:5
[摘要]在開發中碰到這樣的問題:winform窗口中定義了基類窗體,在設計器中打開子類窗體的時候出現諸如“窗口無法使用設計器進行進行設計,發生了......的異常”的信息,并且窗體無法打開,也就沒辦法使用窗體設計器進行界面的設計。但是運行起來一切正常。這個問題的原因就是在解決方案資源管理器中雙擊窗體打開進...
在開發中碰到這樣的問題:
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 調試器