背景:我目前正在調試用C++編寫的定製GUI框架上的應用程序。我已經設法鎖定了大多數錯誤,但是我遇到的最大麻煩的錯誤往往有一個共同的主題。 所有這些似乎與屏幕刷新,重繪或更新匹配提供的數據。這是一個很難調試的問題,因爲我無法在每次刷新時破解,而且這些東西中的大部分都是時間敏感的,所以斷點偶爾會「修復」錯誤。在C++中調試GUI應用程序
問:有沒有人有任何關於調試基於Windows的GUI的技巧,特別是關於單個組件的更新?
背景:我目前正在調試用C++編寫的定製GUI框架上的應用程序。我已經設法鎖定了大多數錯誤,但是我遇到的最大麻煩的錯誤往往有一個共同的主題。 所有這些似乎與屏幕刷新,重繪或更新匹配提供的數據。這是一個很難調試的問題,因爲我無法在每次刷新時破解,而且這些東西中的大部分都是時間敏感的,所以斷點偶爾會「修復」錯誤。在C++中調試GUI應用程序
問:有沒有人有任何關於調試基於Windows的GUI的技巧,特別是關於單個組件的更新?
我同意雙顯示器甚至遠程調試,以減少干擾消息。
我也強烈推薦間諜工具。這些讓你看到系統中正在發送什麼消息。一個這樣的程序是Winspector。 http://www.windows-spy.com/
這可能沒有幫助,但我發現在這種情況下使用雙顯示器很有用。我有一個屏幕上的調試器和另一個屏幕上的應用程序。然後,我可以直接通過代碼,看到應用程序正在刷新或在其他屏幕上執行任何操作。 這樣做仍然有焦點問題,但至少我可以看到它重新繪製時。
在調試Windows控件和用戶界面的刷新/重繪問題時,擁有雙屏幕確實有幫助。
在第二個屏幕上顯示應用程序時,調試器不會在主UI界面上產生「invalidate」,當它斷開調試斷點時。
如果您不能有第二個屏幕,請嘗試同時使用這兩個應用程序,以便應用程序和調試程序不會發生干擾。
測井幾乎是唯一的答案。不知道你的框架,我不能給出一個確切的答案,但基本上打開一個文件,並附加在不同的程序中的消息。最後關閉它。
在消息包括您感興趣的變量的值。
另外使用窗口消息框是有用以查看是否在正確的分支或過程。這對整個流量影響很小。
最後嘗試下載.NET的任何快速版本,並使用Winforms嘗試對特別有問題的區域進行測試。雖然Winform是它自己的框架,但它的控制與Windows提供的控件之間有很高的一致性。
我保持項目水星膠囊的模擬作爲軌道器空間模擬器的附加組件。它是用C++編寫的,必須直接使用Win32進行一些面板和對話。有時候我開始使用VB6(後來的VB.NET)來解決一些複雜的交互問題,然後將它轉換爲C++中的Win32等價物。
但是,這是最後的手段。
鏈接被破壞,它被重定向到一些可疑的photoshooting站點。 – Downvoter 2015-11-22 09:34:07