首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WebkitGTK泄漏

使用WebkitGTK泄漏
EN

Stack Overflow用户
提问于 2013-02-13 00:09:44
回答 1查看 345关注 0票数 1

我正在用WebkitGTK做实验。使用一个简单的"hello world“风格的应用程序,除了下载网页,然后退出,WebKit在运行程序后报告泄漏的对象:

代码语言:javascript
复制
LEAK: 1 CachedResource
LEAK: 12 WebCoreNode

WebkitGTK程序是一个简单的C程序:

代码语言:javascript
复制
#include <gtk/gtk.h>
#include <webkit/webkit.h>
#include <stdio.h>

static void load_status_callback(GObject* object, GParamSpec* pspec, void* window)
{
        WebKitWebView* view = WEBKIT_WEB_VIEW(object);
        WebKitLoadStatus status = webkit_web_view_get_load_status(view);

        switch (status) 
        {
            case WEBKIT_LOAD_FINISHED:
            {
                printf("WEBKIT_LOAD_FINISHED\n");
                gtk_main_quit();
                break;
            }
            default: g_assert_not_reached();
        }
};

int main(int argc, char* argv[])
{
    gtk_init(&argc, &argv);
    GtkWidget *main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(main_window), 800, 600);
    WebKitWebView *webView = WEBKIT_WEB_VIEW(webkit_web_view_new());

    GtkWidget *scrolledWindow = gtk_scrolled_window_new(NULL, NULL);
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow),
    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
    gtk_container_add(GTK_CONTAINER(scrolledWindow), GTK_WIDGET(webView));
    g_signal_connect(webView, "notify::load-status", G_CALLBACK(load_status_callback), main_window);
    gtk_container_add(GTK_CONTAINER(main_window), scrolledWindow);

    webkit_web_view_load_uri(webView, "http://127.0.0.1/test.html");
    gtk_widget_grab_focus(GTK_WIDGET(webView));
    gtk_widget_show_all(main_window);

    gtk_main(); // Run main event loop

    gtk_widget_destroy(main_window);

    return 0;
}

我下载的HTML很简单:

代码语言:javascript
复制
<html>
<head>
<script type = "text/javascript"></script>
</head>
<body>
<div id = "foo"></div>
</body>
</html>

经过一些实验后,我观察到如果删除<script>标记就不会发生泄漏,这让我相信我应该做些什么来关闭JavaScriptCore。那么,为什么WebKit要报告泄密呢?

EN

回答 1

Stack Overflow用户

发布于 2016-01-03 11:23:30

这不是您在代码中做错的任何事情。您的问题是,您使用的是WebKit的调试版本,因此它会报告WebKit错误:应该在WebKit内部修复的内存泄漏。

你应该改用WebKit的发布版本,除非你真的想调试一些特定的东西。调试构建速度较慢,并且在启用断言的情况下运行,这种做法使它们比发布构建更频繁地崩溃。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14836733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档