Russian Qt Forum

Qt => Вопросы новичков => Тема начата: unkeep от Август 07, 2013, 11:43



Название: [РЕШЕНО (разные dll для разных сборок)] почему relise работает с ошибками
Отправлено: unkeep от Август 07, 2013, 11:43
если запускать в режиме отладки то всё работает отлично (ни ошибок, не предупреждений, память освобождается где надо ), в режиме релиза запускается, но выкидывает с ошибками:

Second Chance Assertion Failed: File f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c, Line 1317

Error - RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly


код кидать не буду, хотелось бы просто узнать особенности сборок в разных режимах. Знаю что в релизе убирается все инструкции для отладки и тп. но на работу приложения это не должно никак влиять, ведь так?
и какие есть методы поиска ошибок в режиме релиза(дебагер же не работает)?


Название: Re: почему relise работает с ошибками
Отправлено: kambala от Август 07, 2013, 11:52
скорее всего где-то используешь битый указатель


Название: Re: почему relise работает с ошибками
Отправлено: unkeep от Август 07, 2013, 11:55
скорее всего где-то используешь битый указатель
почему тогда в режиме отладки ничего не вылетает, и как узнать где имеено этот указатель используется без дебагера?


Название: Re: почему relise работает с ошибками
Отправлено: kambala от Август 07, 2013, 12:05
дебаг он такой, иногда в нем не ломаются указатели

попробуй valgrind. или просто выполни поиск new/malloc по проекту и убедись, что указатели удаляются.


Название: Re: почему relise работает с ошибками
Отправлено: unkeep от Август 07, 2013, 12:11
смог вызвать туже ошибку при обращении к модели. оч странно..
Код
C++ (Qt)
   CreateModels();
   qDebug()<<GetDocFullName(1);
   qDebug()<<GetDocFullName(2);


Код
C++ (Qt)
QString DocSelectorDialog::GetDocFullName(int row)
{
   QModelIndex index = _typeDocModel->index(row,2); // QSqlQueryModel* _typeDocModel;
   return _typeDocModel->data(index).toString();
}

вывод приложения:
"2 ПРЕДВАРИТЕЛЬНОЕ РАСПОРЯЖЕНИЕ"
Error - RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly


а, второй документ не вывело...


Название: Re: почему relise работает с ошибками
Отправлено: mutineer от Август 07, 2013, 12:13
Видимо его в модели нет


Название: Re: почему relise работает с ошибками
Отправлено: unkeep от Август 07, 2013, 12:18
Видимо его в модели нет
есть. поменял местами их вывод в дебаг -  тоже самое только другой документ вывело

вывод приложения:
"3 ПРЕДВАРИТЕЛЬНОЕ РАСПОРЯЖЕНИЕ"
Error - RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly


Название: Re: почему relise работает с ошибками
Отправлено: alex312 от Август 07, 2013, 12:50
unkeep, очень похоже что у тебя приложение работает с одной dll, и в релиз версии и в дебаг. Соответственно в дебаг все нормально, релиз вылетает.


Название: Re: почему relise работает с ошибками
Отправлено: unkeep от Август 07, 2013, 13:35
unkeep, очень похоже что у тебя приложение работает с одной dll, и в релиз версии и в дебаг. Соответственно в дебаг все нормально, релиз вылетает.

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


Название: Re: почему relise работает с ошибками
Отправлено: unkeep от Август 08, 2013, 18:07
очень долго ломал бошку пока не заметил что одна из dll была собрана в дебаг режиме. пересобрал её в релизе - заработало. долго радовался, пока не нарвался на такие же ошибки только теперь после сборки приложения для дебага. Что получается для каждого режима теперь надо свои dll пересобирать? или я что-то не так делаю?



Название: Re: почему relise работает с ошибками
Отправлено: Bepec от Август 08, 2013, 18:13
Для каждой конфигурации нужны свои dll. Дебаг в дебаге, релиз в релизе.


Название: Re: почему relise работает с ошибками
Отправлено: alex312 от Август 08, 2013, 18:34
очень долго ломал бошку пока не заметил что одна из dll была собрана в дебаг режиме.
А я говорил ...


Название: Re: почему relise работает с ошибками
Отправлено: unkeep от Август 12, 2013, 09:47
в связи с этим хотелось бы поинтересоваться, каким образом прописать условие, при котором в зав-ти от режима сборки подгружалась соответствующая dll?


Название: Re: почему relise работает с ошибками
Отправлено: Bepec от Август 12, 2013, 10:46
Какой хороший вопрос для телепатов :D Указывать IDE не надо?

В VS спокойно настраиваются подключаемые в различных конфигурациях dll. Project property->linker -> и вводим необходимые.


Название: Re: почему relise работает с ошибками
Отправлено: unkeep от Август 12, 2013, 11:21
Какой хороший вопрос для телепатов :D Указывать IDE не надо?

Qt creator 2.6 + sdk 4.8.1


Название: Re: почему relise работает с ошибками
Отправлено: alex312 от Август 12, 2013, 23:12
в связи с этим хотелось бы поинтересоваться, каким образом прописать условие, при котором в зав-ти от режима сборки подгружалась соответствующая dll?
Подгрузкой dll занимается ОС, и если у тебя дебаг и релиз версии dll называются одинаково - то это не исправить.
Соответственно к дебаг версии библиотеки обычно добавляют суффикс "d". (пример - QGui.dll и QGuid.dll).

Что бы разделять разные версии библиотек я пользуюсь такой конструкцией в *.pro файле :
Код:
CONFIG(debug, debug|release) {
    TARGET = mylibd
}
else {
    TARGET = mylib
}
- это для библиотеки.
И соответственно аналогичная конструкция для подключения:
Код:
CONFIG(debug, debug|release) {
LIBS += -lmylibd
}
else {
LIBS += -lmylib
}


Название: Re: почему relise работает с ошибками
Отправлено: unkeep от Август 13, 2013, 10:10
благодарю, то что надо. ;)