Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: ZicoRio от Январь 11, 2013, 02:39



Название: Грешу на QtWebKit, просьба помочь
Отправлено: ZicoRio от Январь 11, 2013, 02:39
Всем привет.
Ось: Windows XP x32 Pro SP3.
Qt: 4.8.4
MinGW: 4.4
Пишу в NetBeans 7.2.1.

Коротенько так:
пишу свой браузер для своего же веб-приложения где функциональный интерфейс на Flash.
Приложение состоит из QToolBar-а с кнопками Back, Forward, Reload и Stop.
Также на нем QLineEdit для ввода адреса. Также QWebView как setCentralWidget. Это все что есть.

Загружаю страницу в QWebView.
На странице находятся 2 iframe верхний (с интерфейсом на Flash - кнопки разные всякие),
во втором 10 вложенных iframe (один над другим для отображения разного рода информации,
но отображается только один из вложенных).

Вложенные iframe -ы (10 штук) формируются не сразу, а только в определенный момент.
Так вот когда их еще нет я без проблем нажимаю Reload, выходит окно подтверждения,
чтобы покинуть страницу (сделано на JavaScript), подтверждаю и происходит перезагрузка
страницы - все ОК.
А вот когда iframe -ы (10 штук) сформированы, кстати сказать они формируются после сигнала
из FlashPlayer-a (ExternalInterface.call - вызывается JavaScript функция) после подтверждения перезагрузки
приложение крешится (с предложением отослать данные в MS).
Так же оно крешится если вызвать из Flash вывод на печать (именно когда окно вылезает для выбора принтера).

Запустил дебаггер, говорит - Получен сигнал: SIGSEGV (Segmentation fault)
и в самом последнем стеке вызовов - Cannot access memory at address 0x0
также где-то в середине списка вызовов - Cannot access memory at address 0xbaadf00d

В обычных браузерах все отлично работает!

Внимание вопрос:
как окончательно убедиться, что это такое, моя ошибка или таки баг QtWebKit-а???
Голова моя пополам уже, большая просьба помочь!


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: carrygun от Январь 11, 2013, 05:19
Извиняюсь за оффтоп, но "Cannot access memory at address 0xbaadf00d" убило  ;D


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: ZicoRio от Январь 11, 2013, 06:08
Ну чем конкретно убило-то?
Поделились лучше бы.
Нужна любая информация.


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: Bepec от Январь 11, 2013, 06:54
bad - плохо :D baad - очень плохо с выражением :D

У вас ошибка в вашем коде, % на 95.

Видимо идёт где то обращение по несуществующему указателю.

Смотрите код, локализуйте место ошибки, исправляйте код, наслаждайтесь жизнью.


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: carrygun от Январь 11, 2013, 10:09
А f00d это food (еда). Вроде бы это как одна из стандартных ошибок gcc, когда программа лезет кудато не туда в память. Чтото в духе stack protector'а.
Как уже говорили скорее всего чтото в коде у тебя.


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: ZicoRio от Январь 11, 2013, 13:15
Если это моя ошибка , я буду только счастлив.
Посмотрите, пожалуйста, мои исходники,
там некоторые кнопки без слотов, это я
старался облегчить код:

main.cpp
Код:
#include "mainwindow.h"

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QLocale::setDefault(QLocale(QLocale::Russian,QLocale::RussianFederation));
    QTextCodec *utfcodec=QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(utfcodec);
    QTextCodec::setCodecForCStrings(utfcodec);
    
    MainWindow *browser = new MainWindow();
    browser->setWindowIcon(QIcon("favicon.ico"));
    browser->resize(1060,800);
    browser->move(40,0);
    browser->show();
    return app.exec();
}

mainwindow.h
Код:
#ifndef       MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QWebView>
#include <QWebFrame>

class netAccessManager: public QNetworkAccessManager{
    public:
    QNetworkReply * createRequest(Operation op,const QNetworkRequest & req,QIODevice * outgoingData){
        QNetworkRequest myReq(req);
        myReq.setRawHeader("User-Agent","MyBrowser QtWebKit/4.8.4");
        return QNetworkAccessManager::createRequest(op,myReq,outgoingData);
    }
};

class MainWindow : public QMainWindow{
    Q_OBJECT
    public:
        MainWindow();
        netAccessManager *netman;
        QWebView *view;
        QLineEdit *locationEdit;
        
        void doAlertPan(QString me);
        
    public slots:
        void sslErrorHandler(QNetworkReply* qnr, const QList<QSslError> & errlist);
        void changeLocation();
        void tomysite();
        void doPrint(QWebFrame * fr);
        
};

#endif


mainwindow.cpp
Код:
#include "mainwindow.h"

MainWindow::MainWindow(){
    view=new QWebView(this);
    netman=new netAccessManager();
    view->page()->setNetworkAccessManager(netman);
    view->page()->settings()->setAttribute(QWebSettings::PluginsEnabled,true);
    view->page()->settings()->setAttribute(QWebSettings::JavascriptEnabled,true);
    view->page()->settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows,true);
    view->page()->settings()->setAttribute(QWebSettings::LocalStorageEnabled,true);
    view->page()->settings()->setAttribute(QWebSettings::PrintElementBackgrounds,false);
    view->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled,true);
    view->page()->setForwardUnsupportedContent(true);
    view->page()->createStandardContextMenu();
    
    locationEdit = new QLineEdit(this);
    locationEdit->setSizePolicy(QSizePolicy::Expanding,locationEdit->sizePolicy().verticalPolicy());
    
    QToolBar *toolBar = addToolBar(tr("Navigation"));
    toolBar->addAction(view->pageAction(QWebPage::Back));
    toolBar->addAction(view->pageAction(QWebPage::Forward));
    toolBar->addAction(view->pageAction(QWebPage::Reload));
    toolBar->addAction(view->pageAction(QWebPage::Stop));
    QPushButton *b1=new QPushButton("My site",this);
    toolBar->addWidget(b1);
    toolBar->addWidget(locationEdit);
    QPushButton *b2=new QPushButton("=>",this);
    toolBar->addWidget(b2);
    
    connect(view->page()->networkAccessManager(),SIGNAL(sslErrors(QNetworkReply*,const QList<QSslError> & )),
            this,SLOT(sslErrorHandler(QNetworkReply*,const QList<QSslError> & )));
    connect(view->page(),SIGNAL(printRequested(QWebFrame *)),this,SLOT(doPrint(QWebFrame *)));
    connect(b1,SIGNAL(clicked()),this,SLOT(tomyprog()));
    connect(b2,SIGNAL(clicked()),SLOT(changeLocation()));
    
    QString addr="http://mysite.ru";
    locationEdit->setText(addr);
    QUrl url = QUrl(addr);
    view->load(QUrl(url));

    setCentralWidget(view);
}

void MainWindow::doAlertPan(QString me){
    QMessageBox msgBox;
    msgBox.setWindowIcon(QIcon("favicon.ico"));
    msgBox.setIcon(QMessageBox::Information);
    msgBox.setWindowTitle(tr("WebPage :: Сообщение"));
    msgBox.setText(me);
    msgBox.exec();
}

void MainWindow::tomysite(){
    QString addr="https://mysite.ru";
    locationEdit->setText(addr);
    QUrl url = QUrl(addr);
    view->load(url);
    view->setFocus();
}

void MainWindow::sslErrorHandler(QNetworkReply* qnr,const QList<QSslError> & errlist){
       qnr->ignoreSslErrors();
}

void MainWindow::changeLocation(){
    QUrl url = QUrl(locationEdit->text());
    view->load(url);
    view->setFocus();
}

void MainWindow::doPrint(QWebFrame * fr){
    QPrinter *printer=new QPrinter();
    printer->setOrientation(QPrinter::Portrait);
    printer->setPaperSize(QPrinter::A4);
    QPrintDialog *dialog=new QPrintDialog(printer);
    if (dialog->exec()==QDialog::Accepted){
    fr->print(printer);
    }
}


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: Bepec от Январь 11, 2013, 13:19
Будет в сотни, нет, в ТЫСЯЧИ раз лучше, если вы запакуете свой проект в архив и приложите к сообщению :)

PS Ответ-> Дополнительные опции-> Вложение.


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: Пантер от Январь 11, 2013, 13:20
Ты бы лучше сделал минимальный компилябельный пример, воспроизводящий ошибку. Быстрее помощь получишь.


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: ZicoRio от Январь 11, 2013, 13:28
Исходники выложил практически без правки, просто удалил локальные URL адреса.
По поводу ошибки в том-то и дело я не могу отловить ее именно в своем коде.
Большая просьба просмотреть мои исходники (они весьма небольшие - всего 3 файлика)
и сказать где я наврал (если наврал).


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: Bepec от Январь 11, 2013, 13:32
Посмотрел - всё работает.

В чем ошибка - хз. Где падает - хз. Когда падает - хз. На чём падает - хз.

PS вы конечно молодец, но проект без воспроизведения ошибки по ценности равен дырке от бублика.


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: ZicoRio от Январь 11, 2013, 13:40
Дык в том-то и печаль, что ошибка похоже не моя (название темы).
На обычных сайтах все работает, падает именно на моем веб приложении с FlashPlayer-ом
и запусками JavaScript из него.
А по поводу выложить весь проект, это вы имеете ввиду все файлы проекта NetBeans?


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: Bepec от Январь 11, 2013, 13:43
Падает из-за ТВОЕГО приложения. Из-за ТВОЕГО проекта. Из-за ТВОИХ ошибок в твоём проекте.

Qt браузер работает стабильно. В его основе, не дай бог ошибиться, скрывается сафари.

Как мы можем помочь ТЕБЕ найти ошибку в ТВОЁМ не Qt проекте, из-за которого у тебя вылетает ошибка?

PS играем в параноиков экстрасенсов.


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: ZicoRio от Январь 11, 2013, 13:48
Не понял выражение [не Qt проекте] - всмысле?
Хорошо, если вы так уверены, что ошибка в моих трех файликах с кодом,
то что конкретно мне делать, куда дальше-то смотреть?


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: Пантер от Январь 11, 2013, 14:03
Чтобы понять, где у тебя ошибка, нужно ее воспроизвести, а для этого нужно твое вэб-приложение. 


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: ZicoRio от Январь 11, 2013, 22:13
Мое приложение доступно пока только локально.
Хотя при компиляции ошибок никаких, может ли быть
ошибка в связке NetBeans + Qt + MinGW ?


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: Bepec от Январь 11, 2013, 23:09
Я бы сказал проще.

Раз падает Qt приложение, то проблема в нём.

Приложение это компилятор + код Qt + твой код.

Компилятор сомнению не подлежит.

Код webkit'а сомнению не подлежит. За него ручаются тролли. До сих пор я не слышал и не видел его падений. Т.е. его отбрасываем.

Твой код... Ясно? :)


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: ZicoRio от Январь 11, 2013, 23:25
Ваша категоричность меня пугает.
Вы же сами сказали что мой код написан верно.
Так как же может в нем быть ошибка - вот это не понимаю!?


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: Bepec от Январь 11, 2013, 23:36
Вы привели малую часть кода :D

Вырезанную. По ней судить о всей программе - как по горошине судить о луке, росшем на соседней грядке :)

А категоричность проста. Тролли у меня сомнений не вызывают. У них бывают ляпы, но не настолько большие :)

Компиляторы в грехе замечены не были.

А вас и ваш код неизвестная величина. Прям таки как испорченный указатель :D


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: ZicoRio от Январь 11, 2013, 23:49
На этот раз ваша самоуверенность сыграла с вами злую шутку!
Я выложил абсолютно весь свой код! Больше нет ни строчки, уверяю вас!
Именно поэтому я в недоумении...


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: ZicoRio от Январь 12, 2013, 15:22
Скомпилировал из под VS 2010 - походил по yandex-у,
тоже падает в какой-то момент с bbadbeef.
Предположение такое - происходит в какой-то момент событие (сигнал)
у которого нет обработчика (слота) и все это связано с JavaScript.

У кого какие будут соображения?...


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: Bepec от Январь 12, 2013, 17:07
Пожалуйста не врите.
Цитировать
Я выложил абсолютно весь свой код! Больше нет ни строчки, уверяю вас!
!=
Цитировать
Посмотрите, пожалуйста, мои исходники,
там некоторые кнопки без слотов, это я
старался облегчить код:

С таким настроем вам никто не поможет. Вы ни проблему предъявить не можете, ни условия её вызова.

PS мб у вас на компе что-то такое злобное?


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: ZicoRio от Январь 12, 2013, 17:19
Я конечно понимаю, что человек в данной теме должен быть педантом,
но то на что вы ссылаетесь в предыдущем сообщении в данном случае
не говорит ни о чем!!! Я действительно компилю именно эти три выложенные файла.
Именно в ТОЧНО ТАКОМ ЖЕ ВИДЕ как я их показал, да без привязки слота - как и писал.
Опустите пож. свое недоверие моим словам.
Просьба хотя бы что-то предложить...


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: Bepec от Январь 12, 2013, 18:29
Кхм.

Не обижайтесь на мои слова, но...

Вот как выглядит ситуация :

У меня не работает автомат.

Я нажимаю на курок, он стреляет. А потом перестаёт. Это не я что-то не сделал. Я грешу на Калашникова.

(тут вопросы о минимально компилируемой проблеме)

Нет нет, всё у меня круто, это у Калашникова что-то не то.


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: ZicoRio от Январь 12, 2013, 18:56
Очень жаль, что никто так ничего путного и не предложил :((
Ну ладно и на том спасибо, что сразу не послали... очень грустно...


Название: Re: Грешу на QtWebKit, просьба помочь
Отправлено: Bepec от Январь 12, 2013, 19:04
Грустно, когда проект в 25к строк и в нём несчастный, бедный и печальный неинициализированный указатель бродит :D

А вы просто не даёте точку опоры для оказания вам помощи.

PS у меня кутешный webView 24/7 гоняет на одном серферном сайте. Неполадок замечено не было.