我們的團隊正在開發一個使用Qt 4.7.4的複雜應用程序。我們提供的關鍵功能之一需要QWebBrowser呈現的HTML + JS內容。標準窗口打開/保存對話框被WebKit打破
的問題是,一些網頁的加載導致破裂打開/保存對話框:
在互動方面的對話仍然是「作品」:文件過濾器組合框可以打開,文件名稱可以輸入,但所有這些都是錯誤的。文件列表和目錄樹根本沒有繪製。
我發現在Qt bug跟蹤器和谷歌上沒有關於這個問題的bugreports。我們認爲這個問題對我們的項目是本地的。我們假設某些comctl32.dll內部結構被某人的寫操作毀於無效地址,但我們不知道如何捕捉真正的原因。 另外值得一提的是,這個問題並沒有出現在Qt 5.4和任何版本的Windows上,都不到8.0。不幸的是,我們應該繼續使用Qt 4.8構建下一個版本(該項目非常龐大,升級過程需要花費大量時間)。
如何調試此類問題?什麼內存操作和/或WinAPI調用應該被掛鉤?任何想法是高度讚賞。
工具鏈是MSVC 9.0(VS 2008)
如果您希望Qt 4.7能夠在Windows 8及更高版本上運行,您需要自行維護(或爲其購買自定義合同)。如果可能,您可以卸載並重新加載comctl32.dll。但最重要的是,這指向了Qt內存錯誤,或者(更可能)是代碼中的內存錯誤。使用靜態分析器來查看是否漏掉了任何明顯的東西。這裏有多個選項,但考慮到項目的規模,除了最新的Visual Studio版本之外,您至少應該使用PVS-Studio和Coverity。 –