【发布时间】:2015-11-30 10:45:15
【问题描述】:
我们的团队正在使用 Qt 4.7.4 开发一个复杂的应用程序。我们提供的关键功能之一需要由 QWebBrowser 呈现的 HTML+JS 内容。
问题是加载某些页面会导致打开/保存对话框损坏:
对话框在交互方面仍然“有效”:可以打开文件过滤器组合框,可以输入文件名,但所有这些都画错了。完全不绘制文件列表和目录树。
我在 Qt 错误跟踪器和谷歌上没有发现关于这个问题的错误报告。我们认为问题是我们项目的本地问题。我们假设某些 comctl32.dll 内部结构被某人对无效地址的写操作破坏了,但我们不知道如何找出真正的原因。 另外值得一提的是,这个问题不会出现在 Qt 5.4 和低于 8.0 的任何 Windows 版本上。不幸的是,我们应该在 Qt 4.8 上构建下一个版本(项目很大,升级过程需要大量时间)。
如何调试这样的问题?应该挂钩哪些内存操作和/或 WinAPI 调用?任何想法都受到高度赞赏。
工具链是 MSVC 9.0 (VS 2008)
【问题讨论】:
-
如果您希望 Qt 4.7 在 Windows 8 及更高版本上运行,您需要自己维护它(或为其购买自定义合同)。如果可能,您可以卸载并重新加载 comctl32.dll。但最重要的是,这要么指向 Qt 内存错误,要么(更有可能)指向代码中的内存错误。使用静态分析器来查看您是否遗漏了任何明显的东西。那里有多种,但考虑到您的项目的大小,您应该至少使用 PVS-Studio 和 Coverity,除了最近的 Visual Studio 版本。
标签: c++ qt winapi webkit qwebview