Qt5.2 / C ++严重/致命错误检测

时间:2014-06-25 15:04:48

标签: c++ qt qt5 qtwebkit qt5.2

美好的一天,

我使用以下代码打开并显示html内容。

 void MyClass::playHtml(QString filePath, int w, int h) {
    QUrl url = QUrl::fromLocalFile(filePath);

    mWidget = new QWebView(this);
    mWidget->page()->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
    mWidget->page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
    mWidget->setGeometry(0, 0, width(), height());

    float h_scale = (float) height() / h;
    float w_scale = (float) width() / w;
    float zoom = 1.0;
    if (h_scale < w_scale) {
        zoom = h_scale;
    } else {
        zoom = w_scale;
    }
    mWidget->setZoomFactor(zoom);
    mWidget->load(url);

    mWidget->show();
}

要复制到剪贴板,请将视图切换到纯文本模式
这是在MyClass中,它设置自己的几何,这个函数适当地缩放QWebView以保持纵横比。删除MyClass对象时将调用mWidget(QWebView pointer)的删除。以下是调用它的过程。

1。)MyClass被实例化为“mclass”。

2。)实例化后,上面的playHtml方法在mclass对象上调用

3.)上面的playHtml方法获取了一个驻留在一个独立文件夹中的html文件的完整路径,w / h是用于缩放的html内容的预定维度

4。)大约25秒后,mclass对象被删除

4a。)在这25秒内,playHtml方法适当地缩放html内容,并加载html文件。动画等很多javascript都会发生。

5.)删除后,发生MyClass的另一个实例化并重复该过程

这个过程可以在一天内一个接一个地重复3000次。在此期间,cpu和ram都不征税。我在上面的过程中唯一遗漏的是日志记录。我安装了一个MessageHandler来记录qDebug和其他消息。

以上是在上述过程运行一段时间后(在几个小时到几天内),我在日志中看到的内容。

每个“MyClass”实例中的一堆:

CRITICAL: QWindowsBackingStore::flush: GetDC failed ()

后面跟着一堆“MyClass”的实例:

CRITICAL: QWindowsBackingStore::flush: BitBlt failed ()

紧急事故发生后不久。

在事件查看器中,我收到崩溃“错误”消息。它总是在其中一个故障模块MSVCR100.dll或其中一个Qt5Webkit或Qt5WebkitWidget dll。

我不是特意画任何东西。我依靠QWebView来做到这一点 - 用于绘制自身及其包含的内容。除非上述情况开始发生,否则它会很好。除软件外,机器上没有其他任何东西在运行。

如何检测这样的错误?此时,在他们到达日志之前,我对他们一无所知。我想在那段时间之前检测并处理它们,但我不确定如何。作为旁注,我想借此机会了解有关Qt和C ++的错误检测的更多信息。首先,我如何检测这样的错误,这些错误似乎正在食物链中发生。我担心我被Java / C#提供的堆栈跟踪所破坏。

环境信息:

  • Windows 7 professional 64bit
  • Qt 5.2.1(32位)
  • 使用VS2010编译

谢谢!

-Jason

0 个答案:

没有答案