2017-09-03 26 views
1

上下文:調用堆棧中的外部代碼是否足以證明我的代碼是否正常?

我有一個在使用MEF的主機應用程序中運行的WPF應用程序。這個主機應用程序由我工作的另一個部門開發,他們提供給我們的都是我們使用的一些程序集和C#接口。我的WPF應用程序有一個導出到主機應用程序的引導程序。

問題:

說我有反覆出現的問題是,當我的一些按鈕的Click事件運行任何我的事件處理程序的WPF應用程序的UI元素全部消失。所以很自然地,我在其中一個處理程序的第一行放置了一個斷點,然後進行調試。但是我在調​​用堆棧中看到的全部是我的行(我放置斷點的地方),而其餘的調用堆棧都有外部代碼。所以我想弄明白這是主機應用程序中的問題,還是我介紹的東西。調用堆棧只能調用PresentationCore,WindowsBase,mscorlib和主機程序集,其中一個Native-to-Managed和一個Managed-to-Native行。

問:

眼看調用堆棧只有我在上面一個斷點行,剩下的是主機組裝或Windows組件,這是足以讓我說,這個問題是在主機部件?假設它沒有任何Windows程序集。 UI元素在我的斷點被擊中之前消失。

回答

1

我在調用堆棧中看到的所有行都是我的行(我放置斷點的地方),而其餘的調用堆棧都有外部代碼。

這正是在回調中應該發生的情況:您的代碼位於頂部,框架代碼直接顯示在您的代碼中。

這足以讓我說這個問題在主機組件中嗎?

否,原因有二:

  • 您的代碼是負責引導自身與外部框架使用。如果無法正確執行,可能會看到外部代碼中的問題。理想情況下,外部代碼應該能夠捕捉到這些信息,並通知您設置有問題,但即使框架拋出異常而不是優雅地失敗,問題仍然存在於您的代碼中,並且您的代碼可能執行的操作會導致外部框架進入不一致的狀態。再一次,理想情況下,外部框架應該檢測到這一點,但最終的解決方案將在您的代碼中。

的UI元素消失之前我遇到斷點。

UI元素需要一個正在運行的程序才能重繪自己。這就是爲什麼使用斷點調試UI可能會有問題。您可以通過向您的代碼添加調試跟蹤並運行無斷點來獲得更好的結果。

相關問題